2015-07-28 3 views
2

Мне удалось успешно докровать мое приложение для веб-сервера. Теперь я хочу изучить больше, развернув их непосредственно на раб-мезос через марафон. Я могу развернуть контейнер докера в марафон в двух разных подходах: либо в командной строке, либо через веб-интерфейс марафона. Оба работали для меня, но вызов - это когда я пытаюсь развернуть образ докеры, марафон часто перезапускает задание, а на странице пользовательского интерфейса mesos я вижу много готовых заданий для одного и того же контейнера. Ближе к 10 задачам в минуту. Который не ожидается, я верю.частые перезагрузки - контейнеры-докеры в марафоне/мезо

Мой файл докер выглядит следующим образом:

FROM ubuntu:latest 

#---------- file Author/Maintainer 
MAINTAINER "abc" 

#---------- update the repository sources list 
RUN apt-get update && apt-get install -y \ 
apache2 \ 
curl \ 
openssl \ 
php5 \ 
php5-mcrypt \ 
unzip 

#--------- installing composer 
RUN curl -sS https://getcomposer.org/installer | php 
RUN mv composer.phar /usr/local/bin/composer 
RUN a2enmod rewrite 

#--------- modifying the 000default file 
COPY ./ /var/www/airavata-php-gateway 
WORKDIR /etc/apache2/sites-available/ 
RUN sed -i 's/<\/VirtualHost>/<Directory "\/var\/www"> \n AllowOverride All \n <\/Directory> \n <\/VirtualHost>/g' 000-default.conf 
RUN sed -i 's/DocumentRoot \/var\/www\/html/DocumentRoot \/var\/www/g' 000-default.conf 

WORKDIR /etc/php5/mods-available/ 
RUN sed -i 's/extension=mcrypt.so/extension=\/usr\/lib\/php5\/20121212\/mcrypt.so/g' mcrypt.ini 
WORKDIR /var/www/airavata-php-gateway/ 
RUN php5enmod mcrypt 

#--------- making storage folder writable 
RUN chmod -R 777 /var/www/airavata-php-gateway/app/storage 

#-------- starting command 
CMD ["sh", "-c", "sh pga-setup.sh ; service apache2 restart ; /bin/bash"] 

#--------- exposing apache to default port 
EXPOSE 80 

Теперь я невежествен, как решить эту проблему, любое руководство будет высоко оценен. Thanks

ответ

0

Marathon предназначен для выполнения длительных задач. Поэтому в вашем случае, если вы запустите контейнер Docker, который не продолжает прослушивать определенный порт, что означает, что он успешно или неудачно завершает работу, Marathon начнет его снова.

Например, я начал контейнер Docker, используя простейшее изображение hello-world. Это создало более 10 процессов в пользовательском интерфейсе Mesos за считанные секунды! Это ожидалось. Код внутри контейнера Docker успешно выполнялся и обычно заканчивался. И поскольку он вышел, Marathon удостоверился, что другой экземпляр приложения был запущен немедленно.

С другой стороны, когда я запускаю контейнер nginx, который продолжает прослушивать порт 80, он становится долговременной задачей, а новая задача (контейнер Docker) разворачивается только тогда, когда существующий контейнер выходит (успешно или безуспешно) ,

Возможно, вам необходимо работать с разделом CMD вашего файла Dockerfile. Совместим ли данный контейнер с обычным запуском? То есть без марафона - просто используя простой docker run? Если да, проверьте, продолжает ли он работать в отключенном режиме - docker run -d. Если он выйдет, то CMD - это часть, над которой вам нужно работать.

+0

Спасибо Dharmit, Да, когда я запускаю контейнер для докеров без марафона, он работает отлично, и он остается как длинный контейнер даже в отдельном режиме. Итак, как вы сказали, проблема связана с разделом CMD. Я добавил «/ bin/bash», чтобы сделать его длинным контейнером, который каким-то образом не работает с мезосом, поэтому я добавил бесконечное время (не занятое ожидание, просто сон для состояния) на переднем плане, который держит мой докер контейнер жив и этот трюк работает. Проблема с частым перезапуском заключалась в том, что между одним контейнером умирает, а другой запускается, мой веб-сервер становится недоступным. – psaha4

+1

BTW Dharmit Можете ли вы рассказать мне, как вы использовали марафон для запуска докера? это с помощью командной строки или пользовательского интерфейса марафона? – psaha4

+0

@ psaha4: Я использую командную строку. Я создаю файл json и использую curl, чтобы отправить его в конечную точку '/ v2/apps' в Marathon. Решение loop while, хотя и делает трюк, не выглядит элегантным решением. Если вам понадобится каждый раз выполнять 'sh pga-setup.sh', почему бы не добавить его в оператор' RUN' в вашем файле Docker? – Dharmit

 Смежные вопросы

  • Нет связанных вопросов^_^