我有一个本地的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
Run Code Online (Sandbox Code Playgroud)
sudo start docker-registry
Run Code Online (Sandbox Code Playgroud)
响应:docker-registry启动/运行,进程8620
sudo status docker-registry
Run Code Online (Sandbox Code Playgroud)
响应:docker-registry启动/运行,进程8620
sudo stop docker-registry
Run Code Online (Sandbox Code Playgroud)
响应:docker-registry停止/等待
但是,它实际上并没有停止.该过程仍然存在,容器正在运行,并且它仍然可以正常运行
它完全停止:
docker stop docker-registry
Run Code Online (Sandbox Code Playgroud)
我已经尝试将其添加到upstart脚本中:
post-stop script
docker stop docker-registry
end script
Run Code Online (Sandbox Code Playgroud)
但它只是返回: 停止:停止时作业失败
这对我有用:
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
Run Code Online (Sandbox Code Playgroud)
我假设官方Docker文档只关心自动启动部分.upstart的实际PID输出与实际的docker进程PID不同,我怀疑这会在停止时导致一些不匹配:
sudo service foo-docker start
foo-docker start/running, process 30313
Run Code Online (Sandbox Code Playgroud)
这个过程是什么?看起来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
Run Code Online (Sandbox Code Playgroud)
在容器内运行的实际命令的PID是不同的:
pidof foo
30400
Run Code Online (Sandbox Code Playgroud)
并且杀死docker PID,正如我猜测的service foo-docker stop那样,不会杀死容器(或在其中运行的命令):
sudo kill 30386 # or sudo service foo-docker stop
#30400 is still running
Run Code Online (Sandbox Code Playgroud)
不需要在这里调用 docker stop Upstart 的 stop 命令会向容器发送 SIGTERM 信号,这是同样的事情。
不过,让 --rm 在这里工作可能会出现问题。Github 上有一个关于它的开放问题
| 归档时间: |
|
| 查看次数: |
6155 次 |
| 最近记录: |