2016-10-01 301 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 
相關問題