在docker中运行apache

时间:2015-01-09 18:50:17

标签: docker boot2docker

好的,我已经用尽了所有的线程和文章,但仍然无法让我的apache webserver在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

我可以构建好,但是,似乎无法在守护进程/独立模式下运行容器。我该怎么做?

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

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

我必须登录容器并启动服务才能运行Web服务器。

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

1 个答案:

答案 0 :(得分:5)

这是一个经典的码头工具问题。您启动的过程必须在前台执行,否则容器会停止。

因此,为了能够这样做,可以在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方法比tail -f - 方法更清晰,更 ,我个人更喜欢这种方法。

另一个替代方案就是不启动httpd作为服务,而是提供-DFOREGROUND参数。这将使httpd附加到shell(而不是分支到后台进程)。

/usr/sbin/httpd -DFOREGROUND

有关前景模式中http的更多信息,请查看此question