如何更改在 DOCKER 容器内运行的 apache 的 httpd.conf 并重新启动 apache

Posted

技术标签:

【中文标题】如何更改在 DOCKER 容器内运行的 apache 的 httpd.conf 并重新启动 apache【英文标题】:How to make changes to httpd.conf of apache running inside DOCKER container and restart apache 【发布时间】:2016-03-30 16:55:14 【问题描述】:

我是 docker 新手。在我们的 docker 环境中 - Apache 已安装并且已启动并正在运行。 现在我需要进入容器,修改httpd.conf,保存,然后我需要重启apache。

你们能告诉我,需要做什么。 我很困惑—— 'exec' 和 'attach' 命令。

【问题讨论】:

【参考方案1】:

无需附加或执行(这实际上是一个调试功能)

您可以使用docker cp 将您的httpd.conf 的本地版本复制到容器中。 (这样,您可以在本地环境中轻松修改文件)

docker cp httpd.conf <yourcontainer_name>:/path/to/httpd.conf

完成后,您可以发送 USR1 信号以请求正常重启(请参阅docker kill 语法):

docker kill --signal="USR1" <yourcontainer_name>

&lt;yourcontainer_name&gt; 替换为运行 Apache 的容器 ID 或名称。

只有当你的容器启动的主进程是

CMD ["apachectl", "-DFOREGROUND"]

在“Docker: How to restart a service running in Docker Container”查看更多信息

【讨论】:

感谢 VonC,但是这个 docker 容器是由第三方为我们构建和配置的。所以仍然检查 Dockerfile 的位置以及其中添加了哪些命令。您能否让我知道如何检查:CMD [“apachectl”,“-DFOREGROUND”] 是否已添加?另外 USR1 到底会做什么?我们应该在容器外运行这个命令吗?非常感谢。 @SunagSunagms 很简单:做一个docker inspect &lt;yourContainer_name&gt;|grep CMD @SunagSunagms 至于 USR1,在我的答案中的最后一个链接 kuldeeparya.wordpress.com/2015/01/17/… 中进行了解释。 非常感谢 VonC !! ,,, 让我来看看这篇文章。如果需要更多信息,我会告诉你的!!。 第一次使用 sudo 运行时记得使用 sudo。【参考方案2】:

通过打开 bash shell 进入容器:

docker exec -it containerName bash

我猜你最好只是重新加载 apache 配置而不是重新启动 apache。 但我不会走这条路,只是修改 Dockerfile 并重建并重新运行映像。

编辑链接:https://docs.docker.com/engine/reference/commandline/exec/

【讨论】:

1) 非常感谢您的快速回复,我可以在容器内对 httpd.conf 进行更改,但是当尝试将 apache 配置重新加载为 - 'service httpd reload' 它显示 bash: 命令不可用。请让我知道如何在容器内重新加载 apache 配置。 2)另外,能否请您告诉我如何找到 Docker 文件的路径并添加行以在 httpd.conf 中进行更改保存并重建并重新运行映像?【参考方案3】:

要更新 Apache 配置,您需要:

    替换 Apache 配置。

    如果您有从容器外部映射的配置文件夹,您应该更新容器外部的配置。

    如果您的 apache 配置存储在容器内,您将需要运行如下内容:

    docker cp httpd.conf YOUR_CONTAINER_NAME:/path/to/httpd.conf
    

    优雅地重启 Apache

    sudo docker exec -it YOUR_CONTAINER_NAME apachectl graceful
    

【讨论】:

以上是关于如何更改在 DOCKER 容器内运行的 apache 的 httpd.conf 并重新启动 apache的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 docker 容器中的时区?

如何在 Docker 中的 Alpine 上运行 Apache 2?

Docker容器怎样更改容器内应用程序的配置文件

Docker 容器内服务自启动

如何检查一个进程是不是在 docker 容器内运行?

docker 容器修改端口