Docker CentOS映像不会自动启动httpd

dwi*_*itz 23 apache centos docker dockerfile

我正在尝试使用Apache和PHP程序运行一个简单的Docker镜像.如果我跑,它工作正常

docker run -t -i -p 80:80 my/httpd /bin/bash
Run Code Online (Sandbox Code Playgroud)

然后手动启动Apache

service httpd start
Run Code Online (Sandbox Code Playgroud)

但是我无法让httpd在运行时自动启动

docker run -d -p 80:80 my/httpd
Run Code Online (Sandbox Code Playgroud)

Apache将启动然后容器存在.我CMD在docker文件中尝试过一堆不同的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
Run Code Online (Sandbox Code Playgroud)

start.sh是

#!/bin/bash
/etc/init.d/httpd start
Run Code Online (Sandbox Code Playgroud)

但是,apache启动后,每次都会存在docker实例

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

Jir*_*iri 20

您需要直接运行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/

  • 谢谢吉日!使用`ENTRYPOINT ["/ usr/sbin/httpd"]`&``CMD [" - D","FOREGROUND"]`有效 (3认同)

Hem*_*ela 13

在你的底部添加这一行,Dockerfile以便在CentOS的前台运行Apache

ENTRYPOINT ["/usr/sbin/httpd", "-D", "FOREGROUND"]
Run Code Online (Sandbox Code Playgroud)