如何在不终止 docker 容器的情况下重新启动 apache2?

2022-08-30 17:33:35

我使用带有标签的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?

我想在将更改放入 docker 文件之前,先尝试使用容器并对其进行自定义。我想安装一些扩展,为了让它们工作,我需要重新启动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

答案 1

如果您使用 apache 作为主要服务来保持正在运行的容器,则无法重新启动它。仅仅因为您构建了映像并使用它设置了CMD。

CMD 的主要用途是为执行容器提供默认值。这些默认值可以包含可执行文件,也可以省略可执行文件,在这种情况下,还必须指定 ENTRYPOINT 指令。

尝试在不重新启动服务的情况下重新加载:

/etc/init.d/apache2 reload

答案 2

我的解决方案是将我的 bash shell 退出到容器中,然后重新启动 Docker 外部的容器。由于Apache被设置为主要服务,因此这也会重新启动Apache,并且不会使容器崩溃。

docker restart <container>

推荐