Docker CentOS映像不会自动启动httpd

我试图用Apache和PHP程序运行一个简单的Docker镜像。 如果我运行它工作正常

docker run -t -i -p 80:80 my/httpd /bin/bash 

然后手动启动Apache

 service httpd start 

但是我不能让httpd在运行时自动启动

 docker run -d -p 80:80 my/httpd 

Apache将启动然后容器存在。 我在docker文件中尝试了一堆不同的CMD

 CMD /etc/init.d/httpd start CMD ["service" "httpd" "start"] CMD ["/bin/bash", "/etc/init.d/httpd start"] ENTRYPOINT /etc/init.d/httpd CMD start CMD ./start.sh 

start.sh是

 #!/bin/bash /etc/init.d/httpd start 

然而每次docker实例在apache启动后都会存在

我错过了一些非常明显的东西吗

你需要直接运行apache(httpd) – 你不应该使用init.d脚本。

两个选项:

  1. 你必须在前台运行apache: /usr/sbin/apache2 -DFOREGROUND ... (或CentOS中的/ usr / sbin / httpd)
  2. 您必须通过执行/sbin/init作为入口点来启动所有服务(包括配置为自动运行的apache)。

看到这个不错的帖子: http : //www.kstaken.com/blog/2013/07/06/how-to-run-apache-under-docker/

将此行添加到Dockerfile的底部,以便在CentOS的前台运行Apache

 ENTRYPOINT ["/usr/sbin/httpd", "-D", "FOREGROUND"]