用于运行容器的Upstart脚本不会管理生命周期

时间:2014-07-19 21:22:51

标签: docker upstart

我有一个upstart脚本(比如/etc/init/dtest.conf

start on runlevel [2345]
stop on runlevel [!2345]
respawn
script
  DID=$(docker.io run -d ubuntu /bin/bash -c "echo Starting;sleep 20;echo Stopping")
  docker.io attach $DID
end script

发出start dtest时,新贵日志会永远显示“正在开始......停止”的正确循环。

但是,如果我发出stop dtest,那么它似乎正常退出,但容器将在剩余的休眠时间内运行(通过每秒运行docker.io ps来证明)。

是否应该有一种简单的方法在具有upstart的容器中运行docker镜像并在其中管理其生命周期?

我理想的脚本是这样的:

start on runlevel [2345]
stop on runlevel [!2345]
respawn
exec docker.io run -d ubuntu /bin/bash -c "echo Starting;sleep 20;echo Stopping"

环境:这是在AWS上,在T2.micro中使用Ubuntu 14.04,apt-get install -y docker.io是唯一安装的

1 个答案:

答案 0 :(得分:3)

您应该通过运行以下命令来创建命名容器:

docker run --name dtest ubuntu /bin/bash -c "echo Starting;sleep 20;echo Stopping"

然后创建以下upstart脚本(注意-a标志),它将按预期管理此容器的生命周期

start on runlevel [2345]
stop on runlevel [!2345]
respawn
script
  /usr/bin/docker start -a dtest
end script

我还建议将-r标志添加到主docker守护程序执行脚本中,以便在重新启动主机时,docker不会自动重启容器(相反,这将由upstart脚本完成)< / p>

sudo sh -c "echo 'DOCKER_OPTS=\"-r=false\"' > /etc/default/docker"

详细描述了配置Docker容器以使用像upstart这样的流程管理器的过程here