2014-07-19 46 views
2

我有一个暴发户脚本(比如,/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所证明)。

不应该有一个简单的方法来在容器中运行一个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是唯一安装

回答

3

你应通过运行以下命令创建一个命名容器:

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

然后创建t他下面的新贵脚本(注意-a标志)如您所愿

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

将管理这个容器的生命周期,我还建议在-r标志添加到主泊坞窗守护进程执行脚本,让搬运工当主机重新启动(而不是这将由新贵脚本来完成)将不会自动重启你的容器

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

配置Docker容器像暴发户是一个伟大的详细here描述与流程管理器,工作过程

+0

这让我真的很接近,但仍然需要我关闭命名容器,然后才能通过新贵进行管理....我问了一个后续问题:http://stackoverflow.com/questions/24872480/create-docker-container -from-image-without-starting-it –

+0

@MarshallAnschutz很好的问题。我在那里添加了我的答案。基本上可以通过使用Docker Remote API来实现。 –