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

 手机用户2502897625 发布于 2023-01-12 11:40

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

但它只是返回: 停止:停止时作业失败

1 个回答
  • 这对我有用:

    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
    

    2023-01-12 11:43 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有