Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在不终止docker容器的情况下重新启动apache2?_Php_Apache_Docker_Docker Compose - Fatal编程技术网

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

Php 如何在不终止docker容器的情况下重新启动apache2?,php,apache,docker,docker-compose,Php,Apache,Docker,Docker Compose,我使用以下标签作为基础: 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之前,我想使

我使用以下标签作为基础:

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
sudo docker kill--signal=“USR1”您的容器

可用于实现以下目标的其他信号:

立即停止信号:术语

重新启动信号:USR1

立即重新启动信号:HUP

优美的停止信号:绞车


发件人:

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

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

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

/etc/init.d/apache2 reload

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

docker restart <container>
docker重启

但是在开始之前,您的apache在重新启动时会失败吗?它就是这样存在的?在这种情况下,请通过设置正确的配置并查看这些日志来运行它

您可以尝试的一种方法是登录到容器(bash),并且您可以在其工作的某个点上始终有一个docker commit。然后可以将基本容器图像更改为该图像

对于类似的情况,我有一些变通方法,通过在我的Docker文件中使用不同的入口点,从这些提交的图像中构建新图像

我想自定义容器,我需要安装一些扩展 为了让它们正常工作,我需要重新启动apache以进行更改 效果

这违背了Docker的不变基础设施原则。IMHO,您使用的docker容器类似于成熟的VM。相反,我建议您将docker图像视为最终工件并对其进行版本化。
注意:这只是我的拙见,您可能有一个我不知道的有效用例,我很想找到它。

这就是我在开发开发开发堆栈时所做的。谢谢你写出来和+1。我不接受这个解决方案,因为运行重新加载最终不是一个要求,就好像扩展是在apache启动之前安装的一样,它不需要重新启动它。我接受了这个答案,因为除了这一点之外,还有另一个输入答案。重新启动不是必需的,重新加载配置是必需的,这帮助我构建了一个合适的Dockerfile.Good。我不记得有另一个命令只作为apache配置重新启动。这个命令对这个问题非常有用:}Hello@MagnoC,Dockerfile的基本映像是什么?这对我不起作用,我想你需要在回答中提供更多信息。我得到以下错误,来自守护进程的错误响应:cannotkill container–signal=USR1:没有这样的容器:–signal=USR1。我确保按ID和名称输入正确的容器,两个错误都相同。请用两个破折号替换“signal”之前的字符(可能由stackoverflow的输入字段自动更正)。我面临的问题是,出于某种原因,发送一次信号是不够的,它需要发送两次,这是在尝试在docker容器中设置开发堆栈时,没有运行
docker build
。最后,我得到了一个dockerfile,我只是想尝试一下。请参阅我对CauêAlves answer的评论。此命令重新启动容器,但在其他情况下非常有用:)