gpt4 book ai didi

docker - 如何获得一个 Upstart 脚本来正确管理运行 docker 镜像?

转载 作者:IT老高 更新时间:2023-10-28 12:45:16 26 4
gpt4 key购买 nike

我有一个本地 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

我可以通过以下方式启动我的 docker 注册表:

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

我假设 the official Docker docs只关心自动启动部分。 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

关于docker - 如何获得一个 Upstart 脚本来正确管理运行 docker 镜像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23982672/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com