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

27

我是docker新手。在我们的docker环境中已经安装并运行了Apache。
现在我需要进入容器,修改httpd.conf文件,保存后需要重启Apache。

请问,我该怎么做? 我对“exec”和“attach”命令感到非常困惑。

3个回答

24

无需附加或执行(实际上这本来就是一项调试功能)

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

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

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

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

请将 <yourcontainer_name> 替换为正在运行 Apache 的容器 ID 或名称。

仅当容器启动的主进程是

CMD ["apachectl", "-DFOREGROUND"]

点击访问 "Docker: How to restart a service running in Docker Container" 了解更多。


谢谢VonC,但是这些Docker容器是由第三方为我们构建和配置的。因此,仍在检查Dockerfile位于何处以及添加了哪些命令。您是否可以告诉我如何检查: CMD [“apachectl”, “-DFOREGROUND”]是否已添加?此外USR1具体会做什么?我们应该在容器外运行此命令吗?非常感谢您的帮助。 - Sunag Sunagms
@SunagSunagms 关于USR1信号,请参考我回答中的最后一个链接 https://kuldeeparya.wordpress.com/2015/01/17/docker-how-to-restart-a-service-running-in-docker-container/。 - VonC
非常感谢VonC!!让我仔细阅读这篇文章。 如果需要更多信息,我会告诉你的!! - Sunag Sunagms
@SunagSunagms 然后尝试使用运行容器的镜像执行相同的检查命令(docker inspect 命令至少可以给出容器的镜像,而检查镜像应该可以给出 CMD)。 - VonC
1
第一次运行时,请记得使用sudo。 - Having a life on a beach
显示剩余6条评论

3

更新Apache配置需要执行以下步骤:

  1. Replace Apache configs.

    • If you have config folder mapped from outside of container you should update configs outside of container.

    • If your apache configs are stored inside of container, you will need to run something like this:

      docker cp httpd.conf YOUR_CONTAINER_NAME:/path/to/httpd.conf
      
  2. Do Graceful Apache restart:

    sudo docker exec -it YOUR_CONTAINER_NAME apachectl graceful
    

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:command not found”。请告诉我如何在容器内重新加载Apache配置。
  2. 另外,请问您如何查找Docker文件的路径,并添加行以更改httpd.conf文件并保存、重建和重新运行镜像?
- Sunag Sunagms

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接