频繁重启-marathon/mesos中的docker集装箱

频繁重启-marathon/mesos中的docker集装箱,docker,mesos,mesosphere,marathon,Docker,Mesos,Mesosphere,Marathon,在完全对接我的Web服务器应用程序之前,我一直都很成功。现在,我想通过marathon框架将它们直接部署到mesos从机来探索更多内容。 我可以通过两种不同的方法将docker容器部署到marathon中,一种是命令行,另一种是通过MarathonWebUI。 这两种方法对我都有效,但挑战在于当我尝试部署docker映像时,我会频繁地重新启动作业,并且在mesos UI页面中,我可以看到同一容器的许多已完成作业。每分钟近10项任务。我相信这是预料不到的 我的docker文件如下所示: FROM

在完全对接我的Web服务器应用程序之前,我一直都很成功。现在,我想通过marathon框架将它们直接部署到mesos从机来探索更多内容。 我可以通过两种不同的方法将docker容器部署到marathon中,一种是命令行,另一种是通过MarathonWebUI。 这两种方法对我都有效,但挑战在于当我尝试部署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
来自ubuntu的
最新版本
#----------文件作者/维护者
维修工“abc”
#----------更新存储库源列表
运行apt-get-update&&apt-get-install-y\
apache2\
卷曲\
openssl\
php5\
php5-mcrypt\
解压
#---------安装作曲家
运行curl-sShttps://getcomposer.org/installer |php
运行mv composer.phar/usr/local/bin/composer
运行a2enmod重写
#---------修改默认文件
复制//var/www/airvata php网关
WORKDIR/etc/apache2/可用站点/
运行sed-i的/\n AllowOverride All\n\n/g'000-default.conf
运行sed-i的/DocumentRoot\/var\/www\/html/DocumentRoot\/var\/www/g'000-default.conf
WORKDIR/etc/php5/mods可用/
运行sed-i的/extension=mcrypt.so/extension=\/usr\/lib\/php5\/20121212\/mcrypt.so/g'mcrypt.ini
WORKDIR/var/www/airvata php网关/
运行php5enmod mcrypt
#---------使存储文件夹可写
运行chmod-R 777/var/www/airvata php gateway/app/storage
#--------启动命令
CMD[“sh”、“-c”、“sh pga-setup.sh;服务apache2重启;/bin/bash”]
#---------将apache暴露于默认端口
暴露80
现在我不知道如何解决这个问题,任何指导都将受到高度赞赏。
谢谢

马拉松是用来完成长期任务的。因此,在您的情况下,如果您启动一个Docker容器,但该容器没有在特定端口上保持侦听,这意味着它成功或失败退出,Marathon将再次启动它

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

另一方面,当我启动一个一直监听端口80的nginx容器时,它会变成一个长时间运行的任务,只有当现有容器退出(成功或失败)时,一个新任务(Docker容器)才会启动


您可能需要处理Dockerfile的
CMD
部分。正常启动时,相关容器是否保持运行?也就是说,没有马拉松-只需使用普通的
docker run
?如果是,请检查它是否保持在分离模式下运行-
docker run-d
。如果退出,则需要处理的部分是
CMD

马拉松意味着运行长时间运行的任务。因此,在您的情况下,如果您启动一个Docker容器,但该容器没有在特定端口上保持侦听,这意味着它成功或失败退出,Marathon将再次启动它

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

另一方面,当我启动一个一直监听端口80的nginx容器时,它会变成一个长时间运行的任务,只有当现有容器退出(成功或失败)时,一个新任务(Docker容器)才会启动


您可能需要处理Dockerfile的
CMD
部分。正常启动时,相关容器是否保持运行?也就是说,没有马拉松-只需使用普通的
docker run
?如果是,请检查它是否保持在分离模式下运行-
docker run-d
。如果退出,则
CMD
是您需要处理的部分。

谢谢Dharmit,是的,当我运行docker容器时,它工作正常,即即使在分离模式下,它仍作为长时间运行的容器。正如你所说,问题在于CMD部分。我添加了“/bin/bash”以使其成为一个长时间运行的容器,但它不能与mesos一起工作,因此我在前台添加了一个无限的while(不忙等待,只是一个条件睡眠)循环,它使我的docker容器保持活动状态,并且该技巧有效。频繁重启的问题是,在一个容器死亡和另一个容器启动之间,我的web服务器变得不可用。顺便问一下,你能告诉我你是如何使用marathon来运行docker的吗?是通过命令提示符还是MarathonUI?@psaha4:我在使用命令行。我创建了一个json文件,并使用curl将其发布到Marathon的
/v2/apps
端点。虽然while循环解决方案确实奏效,但它看起来并不像一个优雅的解决方案。如果每次都需要执行
sh pga setup.sh
,为什么不将其添加到docker文件中的
RUN
语句中?RUN将仅在docker构建期间执行。我需要一个shell文件,它可以根据我将要传递的env变量处理一些web服务器文件。所以我在启动或运行docker时需要这个。CMD将在docker运行/重新启动期间执行它。感谢Dharmit,是的,当我运行docker容器时,它工作正常,即即使在分离模式下,它仍然作为一个长时间运行的容器。正如你所说,问题在于CMD部分。我添加了“/bin/bash”以使其成为一个长时间运行的容器,该容器不能与mesos一起工作,因此我在前台添加了一个无限while(不忙等待,只是一个条件睡眠)循环