运行容器的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理器一起工作的过程