我有一个本地的docker-registry,我想用upstart来管理.
我有以下脚本(在/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-registry启动/运行,进程8620
sudo status docker-registry
响应:docker-registry启动/运行,进程8620
sudo stop docker-registry
响应:docker-registry停止/等待
但是,它实际上并没有停止.该过程仍然存在,容器正在运行,并且它仍然可以正常运行
它完全停止:
docker stop docker-registry
我已经尝试将其添加到upstart脚本中:
post-stop script docker stop docker-registry end script
但它只是返回: 停止:停止时作业失败
这对我有用:
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
我假设官方Docker文档只关心自动启动部分.upstart的实际PID输出与实际的docker进程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
并且杀死docker PID,正如我猜测的service foo-docker stop
那样,不会杀死容器(或在其中运行的命令):
sudo kill 30386 # or sudo service foo-docker stop #30400 is still running