我有一个本地码头注册中心,我想用新贵来管理.
我有以下脚本(在/etc/init/docker-registry.conf):中)
description "docker registry"
author "me"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
/usr/bin/docker.io run -a stdout --rm --name=docker-registry \
-v /var/local/docker-registry:/var/local/docker-registry \
-p 5000:5000 mysite:5000/docker-registry
end script我可以从以下几个方面开始我的码头注册:
sudo start docker-registry响应:docker-注册表启动/运行,进程8620
检查以确认它的运行情况?
sudo status docker-registry响应:docker-注册表启动/运行,进程8620
试图用以下方式来阻止它:
sudo stop docker-registry回应:码头-登记站/等候
然而,实际上并没有停止。该进程仍然处于活动状态,容器正在运行,而且它仍然完美地运行着
它确实完美无缺地结束了:
docker stop docker-registry我尝试过将其添加到新启动脚本中:
post-stop script
docker stop docker-registry
end script但是它只是返回:停止:作业在停止时失败
发布于 2014-11-24 15:56:28
这对我起了作用:
description "container foo"
author "me"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
/usr/bin/docker start -a foo
end script
pre-stop script
/usr/bin/docker stop foo
end script我假设正式的码头医生只关心自动启动部分。upstart的实际PID输出与实际的码头进程PID不同,我怀疑这在停止时会导致某些不匹配:
sudo service foo-docker start
foo-docker start/running, process 30313这个过程是什么?看起来这就是Docker启动集装箱的方式:
ps -p 30386 -f
UID PID PPID C STIME TTY TIME CMD
root 30386 1 0 14:48 ? 00:00:00 /bin/sh -e -c /usr/bin/docker start -a foo /bin/sh在容器中运行的实际命令的PID是不同的:
pidof foo
30400而且,正如我猜service foo-docker stop所做的那样,杀死对接者PID不会杀死容器(或者在容器中运行的命令):
sudo kill 30386 # or sudo service foo-docker stop
#30400 is still running发布于 2014-12-15 01:40:46
尝试在docker run行前加上exec。这将导致docker容器在shell脚本的上下文中运行,而不是在shell分叉的上下文中运行。因此,docker run二进制文件将接收到信号并自行清理。
例如,我有以下内容:
description "Docker container for OpenVPN server"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
exec docker run --volumes-from ovpn-data --rm -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn
end script运行start docker-openvpn和stop docker-openvpn也可以正常工作(--rm也很荣幸)。
在Ubuntu14.04上的Docker version 1.4.0, build 4595d4f上进行测试。
如果不起作用,请考虑更新以使用上游码头apt回购:
curl https://get.docker.io/gpg | sudo apt-key add -
echo deb http://get.docker.io/ubuntu docker main | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt-get update && sudo apt-get install -y lxc-docker发布于 2014-06-14 04:33:54
不需要在这里调用停靠停止,Upstart的停止命令将向容器发送SIGTERM信号,这是相同的事情。
让--rm在这里工作可能有问题。关于这件事,吉特布有个公开的话题。
https://stackoverflow.com/questions/23982672
复制相似问题