[英]How to restart apache2 without terminating docker container?
我使用带有标签的php docker 容器作为基础:
php:5.6-apache
当我尝试重新启动容器内的 apache2 时,容器停止:
root@phalconapp:/var/www/html# service apache2 restart
Restarting web server: apache2Terminated
root@phaclonapp:/var/www/html#
me@myLocalComputer:
如何在不停止容器的情况下重新启动 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
如果您使用apache作为主要服务来保留正在运行的容器,则无法重新启动它。 只是因为你构建了图像并用它设置了CMD。
CMD的主要目的是为执行容器提供默认值。 这些默认值可以包含可执行文件,也可以省略可执行文件,在这种情况下,您还必须指定ENTRYPOINT指令。
尝试重新加载而不重新启动服务:
/etc/init.d/apache2 reload
我的解决方案是将我的bash shell退出到容器中,然后重新启动Docker之外的容器。 因为Apache被设置为主要服务,所以这也会重新启动Apache,并且不会使容器崩溃。
docker restart <container>
sudo docker kill --signal="USR1" your_appache_container
您可以使用其他信号来实现以下目标:
立即停止信号: TERM
优雅的重启信号: USR1
立即重启信号: HUP
优雅的停止信号: 绞盘
来自: 这个网站
我想自定义容器,我需要安装一些扩展并让它们工作我需要重新启动apache才能使更改生效。
这违反了Docker的不可变基础架构原则。 恕我直言,你正在使用类似于一个完整的VM的docker容器。 相反,我建议你将docker镜像视为最终的工件并将其版本化。 注意:这只是我的拙见,你可能有一个我不知道的有效用例,我很想知道。
但在开始之前,你的apache在重启时是否会失败? 多数民众赞成如何退出? 在这种情况下,请通过设置正确的配置并查看这些日志来使其运行。
您可以尝试的一种方法是登录容器(对bash),并且您可以始终在其工作的位置提交docker 。 然后,您可以将基本容器图像更改为该图像。
我通过在我的Dockefile中使用不同的ENTRYPOINT来构建来自这些已提交的图像的新图像,从而解决了类似情况。
在 docker 中,我使用这样的命令:
exec /usr/sbin/httpd -D FOREGROUND
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.