Docker CentOS映像不会自动启动httpd

问题描述:

我想用Apache和PHP程序运行简单的Docker映像。它工作正常,如果我跑Docker CentOS映像不会自动启动httpd

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会启动,然后容器时存在。我在泊坞窗文件尝试了很多不同CMD S的

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 

但是每一次的Apache后搬运工例如会存在启动

我缺少的东西真的很明显?

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

两个选项:

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

看到这个好贴:http://www.kstaken.com/blog/2013/07/06/how-to-run-apache-under-docker/

+2

感谢吉日! 使用'ENTRYPOINT [“/ usr/sbin/httpd”]'&'CMD [“-D”,“FOREGROUND”]'treat a – dwitz

+0

仅供参考,一些人也运行:/ sbin/some_deamon && tail -f/var/log/foo –

+1

@ØyvindSkaar'&& tail -f ...'是一个很好的黑客,但请注意它会在日志轮转事件中退出容器,所以我不会推荐它用于/ var/log/apache2 /access.log – Jiri

在底部加入这行你Dockerfile的运行Apache在前台在CentOS

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