运行容器的Upstart脚本不会pipe理生命周期
我有一个暴发户脚本(比如说/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
,那么它似乎退出正常,但容器将运行的hibernate时间的其余部分(如docker.io ps
运行docker.io ps
)。
难道不应该有一个简单的方法来在容器中运行一个Docker镜像,并且在那里pipe理它的生命周期吗?
我的理想脚本是这样的:
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
是唯一安装的东西
您应该通过运行以下命令来创build一个命名的容器:
docker run --name dtest ubuntu /bin/bash -c "echo Starting;sleep 20;echo Stopping"
然后创build下面的新贵脚本(注意-a
标志),它将按照你的期望pipe理这个容器的生命周期
start on runlevel [2345] stop on runlevel [!2345] respawn script /usr/bin/docker start -a dtest end script
我还build议将-r
标志添加到主docker守护进程执行脚本中,以便docker在主机重启时不会自动重启你的容器(相反,这将由upstart脚本完成)
sudo sh -c "echo 'DOCKER_OPTS=\"-r=false\"' > /etc/default/docker"
在这里详细描述configuration一个Docker容器与像新贵那样的进程pipe理器一起工作的过程