我有一个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
是唯一安装的
答案 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