2016-10-01 327 views
2

删除pid文件:为什么Apache2的并不在重新启动上我创造了这个码头工人码头工人形象图像

FROM debian:jessie 
RUN apt-get update && apt-get install -y apache2 python-pip libapache2-mod-wsgi l 
RUN pip install django 
CMD ["/usr/sbin/apache2ctl","-DFOREGROUND"] 

当我运行一个容器,我调用--restart=always说法。
所以如果我重新启动电脑主机,容器会自动重启。 但是,有一个问题:apache2 pid文件没有被删除,所以apache2无法重新启动。我必须手动删除PID文件,一切都很好。

我有2个问题:

  • 为什么这个pid文件不创建一个物理计算机上的任何问题?是否有可能告诉Apache在启动时擦除此pid文件?

  • 是否可以在码头文件中放入“pre-CMD”命令?一种CMD这将在apache2ctl之前运行?

回答

2

是否有可能在泊坞窗文件把“预CMD”命令?

docker-library/php issue 53提到:

我做到了与清理老PID是我的启动项存在。

看到的一个例子PR 59和新apache2-foreground启动脚本:

#!/bin/bash 
set -e 

# Apache gets grumpy about PID files pre-existing 
rm -f /var/run/apache2/apache2.pid 

exec apache2 -DFOREGROUND 

的Dockerfile安装脚本:

COPY apache2-foreground /usr/local/bin/ 

为什么这个pid文件不会产生任何问题在物理计算机上?

上述问题列入本评论:

我碰到的这几次我自己,特别是当我让容器通过运行sudo的停车泊坞窗(直接或重启时停止)。我只是查看了Ubuntu/Debian下的init脚本和关机是如何工作的,而且它看起来像所有东西都试图关闭得太快,并且所有的容器都被关闭了。

如果您有一个容器缓慢停止(ahem,memcached ...),那么您可以轻松地遇到容器没有完全停止的情况。在大多数情况下,我一般都很幸运能够删除容器并从头开始重新创建容器,但如果您所做的只是尝试进行正常的重新启动,那么这可能是难以忍受的难题。

然后:

是否可以告诉Apache清除在启动这个pid文件?

md5补充说:

我也看了看httpd的源代码,发现有以让Apache处理这种情况本身(参见https://github.com/apache/httpd/blob/2.4.x/server/mpm_unix.c#L768) 是否可以告诉Apache没有什么好办法在启动时擦除此pid文件?

0

我已经在这个问题绊倒

[周一18年6月12日:23:30.447512 2017] [芯:警告] [PID 1] AH00111:配置变量$ {APACHE_PID_FILE}没有定义

的解决方案是源像

source /etc/apache2/envvars

Apache的环境变量210

因此,我的脚本看起来像

#!/bin/bash 
set -e 

# Source Apache envvars 
source /etc/apache2/envvars 

# Apache gets grumpy about PID files pre-existing 
rm -f /var/run/apache2/apache2.pid 

exec apache2 -DFOREGROUND 
相关问题