2017-09-29 31 views
0

我们有一个Docker服务器“Docker 17.03.0-ce,build 60ccb22”。我们有大约10名工人,他们每个人都执行一项非常简单的任务,需要几秒钟才能完成并退出。我们决定每一个人都会启动一个码头容器,当脚本结束时,容器会被停止并移除。更重要的是,的crontab处理这么运行的,我们创造了每一个工人一个bash脚本,用实例化标志的容器--rm和-d,也启动脚本文件中的bin /文件夹脚本执行后,Docker容器不会停止并被移除

#! /bin/sh 
f=`basename $0` 
workerName=${f%.*} \\name of the bash script without the part after the . 

//We link with the Docker host the folder of the worker and a log file that is going to be used for monitoring from outside the container. 
docker run --rm -d --name $workerName -v `cat /mnt/volume-fra1-05/apps/pd-executioner/master/active_version`:/var/www/html -v /mnt/volume-fra1-06/apps/$workerName.log:/var/www/html/logs/$workerName.log iqucom/php-daemon-container php bin/$workerName 

echo `date` $0 >> /var/log/crontab.log 

所以,我们为每个使用标志--rm和-d实例化容器的工人创建了一个bash脚本,并且还启动了bin /文件夹中的脚本文件。所有的工作人员都非常相似的结构和代码,非常简单,没有大的代码差异。但是,我们经历了以下行为:一些容器(每次随机)拒绝停止并在几小时后被移除。在容器内部,进程php bin/$workerName仍然以PID 1运行。代码中没有任何东西可以阻止脚本完成。它随机发生,仍然无法找到模式。你有什么想法,为什么这可能会发生?

回答

0

所以这可能是一些与您的PHP脚本卡住了某些问题。但因为你是确保它是假设超时让我们假设240secs那么你应该可以改变你的容器命令

搬运工运行后--rm -d --name $ workerName -v cat /mnt/volume-fra1-05/apps/pd-executioner/master/active_version:在/ var/WWW/html -v /mnt/volume-fra1-06/apps/$workerName.log:/var/www/html/logs/$workerName.log iqucom/php-daemon-container timeout 240 php bin/$ workerName

这将确保任何卡住的容器在超时后退出,如果它不能自行退出

+0

谢谢您的输入Tarun。我一定会尝试并回到你身边。我从未在本地机器上遇到过这个问题。当我从命令行或通过使用Docker容器执行它们时,所有脚本每次完美无缺地完成其执行。 –

+0

你的回答@ tarun-lalwani当场就是因为它在一段时间后停止了容器。但是,我仍然有一个问题,为什么php进程(使用pid 1)没有被杀死,因此没有停止容器。问题可以被视为解决。 –