1

在完全将我的网络服务器应用程序 docker 化之前,我一直是成功的。现在我想通过 marathon 框架将它们直接部署到 mesos slave 来探索更多。我可以通过两种不同的方法将 docker 容器部署到马拉松中,命令行或马拉松 Web UI。两者都对我有用,但挑战是当我尝试部署我的 docker 映像时,马拉松经常重新启动作业,并且在 mesos UI 页面中,我可以看到同一个容器的许多已完成作业。每分钟接近 10 个任务。我相信这不是预期的。

我的 docker 文件如下所示:

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

现在我不知道如何解决这个问题,任何指导将不胜感激。谢谢

4

1 回答 1

0

Marathon 旨在运行长时间运行的任务。因此,在您的情况下,如果您启动一个不继续侦听特定端口的 Docker 容器,这意味着它成功或不成功退出,Marathon 将再次启动它。

例如,我使用最简单的镜像启动了一个 Docker 容器hello-world。这在几秒钟内就在 Mesos UI 中生成了 10 多个进程!这是意料之中的。Docker 容器内的代码已成功执行并正常退出。自从它退出后,Marathon 确保该应用程序的另一个实例立即启动。

另一方面,当我启动一个持续侦听端口 80 的 nginx 容器时,它会变成一个长时间运行的任务,并且只有在现有容器退出(成功或不成功)时才会启动新任务(Docker 容器)。

您可能需要处理CMDDockerfile 的部分。有问题的容器在正常启动时是否继续运行?也就是说,没有 Marathon - 只使用 plain docker run?如果是,请检查它是否继续以分离模式运行 - docker run -d。如果它退出,那么CMD就是您需要处理的部分。

于 2015-07-29T07:18:40.537 回答