【问题标题】:Docker container shutdown scriptDocker 容器关闭脚本
【发布时间】:2016-01-01 15:42:12
【问题描述】:

有没有办法在容器关闭时执行 bash 脚本?

用例:

  • 有一个ma​​ster容器运行nginx + php-fpm
  • 有一个 foo(项目)容器,它使用卷和到 ma​​ster 的链接
  • ubuntu 14.04 被用作所有镜像的基础

foo 启动时,它会扑通一声放入一个虚拟主机配置文件供 nginx 使用(以及将项目添加到 webroot 等)

我们想要实现的是,当 foo 停止时,它会进行清理(删除 vhosts 文件,从 webroot 中删除项目等)

设置 /etc/rcX/KX-cleanup 不起作用。

探索它的唯一其他选择似乎是在入口脚本中以无限循环的方式有一些 bash-sigterm-listener(这会浪费宝贵的 CPU 周期吗?)

【问题讨论】:

    标签: php bash nginx docker


    【解决方案1】:

    如“Docker and the PID 1 zombie reaping problem”和“Trapping signals in Docker containers”中所述,docker 在docker stop/docker kill 上发送 SIGCHLD 或 SIGTERM。

    如果您的foo 应用程序可以监控这些信号,或者如果foo 进程可以提供回调,它可以触发您想要的任何脚本。

    process.on('SIGTERM', function() {
      console.log('shutting down...');
    });
    

    注意:

    创建 Dockerfile 时,请确保使用 ENTRYPOINTRUN 命令的 exec 形式。
    否则应用程序将作为/bin/sh -c 的子命令启动,它不会传递信号。
    容器的 PID1 将是 shell,您的应用程序不会收到来自docker kill 命令的任何信号。

    注意:很快(2015 年第四季度),docker 1.9 将允许您的容器使用新的STOPSIGNAL dockerfile 指令指定它想要响应的停止信号。见PR 15307

    【讨论】:

      猜你喜欢
      • 2020-10-27
      • 2021-08-15
      • 2016-06-30
      • 2019-02-12
      • 1970-01-01
      • 2015-06-10
      • 2017-12-07
      • 1970-01-01
      • 2017-02-21
      相关资源
      最近更新 更多