2016-05-30 40 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