容器重启时错过 /run,直到我执行 bash

容器重启时错过 /run,直到我执行 bash

我在自定义 docker 镜像上遇到了一个奇怪的错误。主机系统是带有 Docker 17.12.0-ce 的 centos 7.4,而镜像基于带有 apache 的 centos 7.2,并在 cgi 上运行自定义应用程序。创建新容器时,它可以正常工作,但是,当重新启动容器时(从 restart=always 标志或手动重新启动),它会在 CMD 运行的脚本末尾不断重新启动 apache bin。

查看 apache 日志(位于卷中),每次 apache 重新启动时都会显示以下行:

[auth_digest:error] [pid 19] (17)File exists: AH01762: Failed to create shared memory segment on file /run/httpd/authdigest_shm.19
[auth_digest:error] [pid 19] (17)File exists: AH01760: failed to initialize shm - all nonce-count checking, one-time nonces, and MD5-sess algorithm disabled
[:emerg] [pid 19] AH00020: Configuration Failed, exiting

通过 Google 搜索错误代码,这似乎是 /run/httpd 文件夹的问题,因此我决定执行一个 bash 终端来查看它是否有问题,并且在我进入容器的那一刻,错误停止了,我得到了以下几行:

[auth_digest:notice] [pid 34] AH01757: generating secret for digest authentication ...
[lbmethod_heartbeat:notice] [pid 34] AH02282: No slotmem from mod_heartmonitor
[core:warn] [pid 34] AH00098: pid file /run/httpd/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
[mpm_prefork:notice] [pid 34] AH00163: Apache/2.4.6 (CentOS) mod_perl/2.0.10 Perl/v5.16.3 configured -- resuming normal operations
[core:notice] [pid 34] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'

而 Apache 开始回答,好像什么也没发生。

我已经多次测试了这种行为,它与时间无关(错误消息可能持续 5 分钟或 1 小时,但只要我登录它们就会停止)。

所以,我的问题是:

  1. 我的 bash 登录可以触发什么来解决问题?
  2. 如何在 CMD 运行的脚本中复制它?

亲切的问候。

附言:如果之前已经问过这个问题,很抱歉,我一直在努力寻找 docker 和“/run”的问题,因为谷歌忽略了斜线。

答案1

因此,通过反复试验,我找到了一种似乎可以解决这个问题的方法,但我完全不知道为什么会发生这种情况。

我在 CMD 运行的脚本开头添加了一条删除 /run/httpd 内容的指令:

1 #!/bin/bash
2
3 rm -rf /run/httpd/*
4
5 [... continue execution as before ...]

这个措施似乎没有什么坏处,所以我会坚持下去。

如果有人能解释这种行为,我会非常高兴。

亲切的问候

相关内容