2016-05-30 34 views
10

我使用爲基礎的php docker container與標籤:如何重新啓動apache2而不會崩潰碼頭集裝箱?

php:5.6-apache 

當我試圖重新啓動容器內的Apache2,容器停止:

[email protected]:/var/www/html# service apache2 restart 
Restarting web server: apache2Terminated 
[email protected]:/var/www/html# 
[email protected]: 

如何重新啓動的Apache2不停止容器?

我要玩的容器和定製它,我把我變成了dockerfile之前。我想安裝一些擴展併爲他們工作我需要重新啓動Apache以使更改生效。

立即停止信號:

Attaching to dltasklight_phlaconapp_1 
phlaconapp_1 | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message 
phlaconapp_1 | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message 
phlaconapp_1 | [Mon May 30 10:19:24.556154 2016] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.10 (Debian) PHP/5.6.22 configured -- resuming normal operations 
phlaconapp_1 | [Mon May 30 10:19:24.556181 2016] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND' 
phlaconapp_1 | [Mon May 30 10:21:11.754993 2016] [mpm_prefork:notice] [pid 1] AH00169: caught SIGTERM, shutting down 
dltasklight_phlaconapp_1 exited with code 0 

回答

14

如果你使用Apache爲主要業務,以保持你的跑步容器,無法重新啓動它。只是因爲你建立了圖像並設置了CMD。

CMD的主要目的是爲執行容器提供默認值。這些默認值可以包含可執行文件,或者可以省略可執行文件,在這種情況下,您還必須指定ENTRYPOINT指令。

嘗試重新加載無需重新啓動服務:

/etc/init.d/apache2 reload 
+2

這就是我在開發dev堆棧時所做的。感謝您寫出來和+1。我不接受這個解決方案,因爲運行重新加載並不是最終的要求,就好像擴展在Apache啓動之前安裝一樣,它不需要重新啓動它。 – k0pernikus

+0

接受了這個答案,因爲除了這個問題之外,其他未知的答案還在繼續。重新啓動不是必需的,重新加載配置,這幫助我構建了一個合適的Dockerfile。 – k0pernikus

+0

好。我不記得有另一個命令只能作爲apache配置重新啓動。這個命令對於這個問題非常有用:} –

0

sudo docker kill --signal="USR1" your_appache_container

,你可以用它來實現以下的其他信號:

這經是日誌文件TERM

優美重新啓動信號:USR1

立即重啓信號:HUP

正常停止信號:絞盤

來源:this website

+0

這對我不起作用,我認爲你需要在答案中提供更多信息。我得到以下錯誤,來自守護進程的錯誤響應:無法殺死容器-signal = USR1:沒有這樣的容器:-signal = USR1。我確保通過ID和名稱輸入正確的容器,這兩個錯誤都是相同的。 –

+0

請用兩個破折號替換「signal」之前的字符(它可能由stackoverflow的輸入字段自動更正)。 – guthy

0

我對這個解決方案是退出我的bash shell中倒入容器中,而只需重新啓動容器泊塢窗之外。由於Apache被設置爲主要服務,這也會重新啓動Apache,並且不會使容器崩潰。

docker restart <container> 
0

但在開始之前,您的apache是​​否在重新啓動時失敗?多數民衆贊成它是如何退出?在這種情況下,請通過設置正確的配置並查看這些日誌來使其運行。

您可以嘗試的一種方法是登錄到容器(對bash),並且您始終可以在其工作點處使用碼頭提交。然後,您可以將您的基本容器映像更改爲該映像。

我在我的Dockefile使用不同入口點的建設從這些致力於那些新的圖像有類似情況的解決方法。

0

我要定製的容器,我需要安裝一些擴展 併爲他們工作,我需要重新啓動Apache使更改生效 效果。

這是違反Docker不可變的基礎架構原則。恕我直言,你正在使用類似於一個完整的虛擬機的碼頭集裝箱。相反,我會建議你把碼頭圖像作爲最終的神器和版本。 注意:這只是我的愚見,你可能有一個我不知道的有用的用例,我很想知道它。

+0

這是在不運行docker build的情況下在Docker容器內設置開發堆棧的時候。最後,我得到了一個dockerfile,我只是想嘗試一些東西。請參閱我對CauêAlves答案的評論。 – k0pernikus