在docker中运行apache

好吧,我用尽了所有的线程和文章,但仍然不能让我的Apache Web服务器在Centos Docker Container上以独立模式运行。

这是我简化的Dockerfile

# install apache RUN yum -y install httpd # start the webserver ADD startservice /startservice RUN chmod 775 /startservice EXPOSE 80 CMD ["/startservice"] 

我的星际服务脚本只是

 #!/usr/bin/sh service httpd start 

我可以build立好,但似乎不能运行在守护进程/独立模式的容器。 我怎么做?

我正在使用它来以独立模式运行容器

 docker run -p 80:80 -d -t webserver 

我必须login到容器并启动Web服务器运行的服务。

 docker run -p 80:80 -i -t webserver bash service httpd start 

这是一个经典的docker问题。 你开始的过程必须在前台执行,否则容器会停下来。

所以,为了做到这一点,您可以在startservice脚本中使用以下代码:

 #!/usr/bin/sh service httpd start # Tail the log file tail -f /var/log/httpd/access_log # Alternatively, you can tail any file or even /dev/null #tail -f /dev/null 

请注意,还有其他方法来解决这个问题。 一种方法是使用supervisord ,保持你的进程活着。 supervisord-approach比tail -f -approach更干净,更容易黑客,我个人更喜欢这个select。

另一种方法是简单地说,不要启动httpd作为服务 ,而是提供-DFOREGROUND参数。 这将使得httpd被附加到shell(而不是分离到后台进程)。

 /usr/sbin/httpd -DFOREGROUND 

有关前景模式下http的更多信息,请检查此问题 。