运行容器的暴发户脚本不会管理生命周期



我有一个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时,upstart日志显示正确的"Starting…"循环。停止"永远。

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

不应该有一个简单的方法来运行一个docker镜像的容器与upstart,并有它的生命周期管理吗?

我理想的脚本是这样的:

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中使用Ubuntu 14.04。micro,只安装了apt-get install -y docker.io

您应该运行以下命令创建一个命名容器:

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

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

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

配置Docker容器与upstart等进程管理器一起工作的过程在这里有详细的描述

最新更新