运行 阿帕奇 docker

running apache in docker

好的,我已经用尽了几乎所有的线程和文章,但仍然无法在 Centos Docker Container 的独立模式下让我的 apache 网络服务器 运行。

这是我的简化 Docker 文件

# 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

我可以很好地构建,但是,似乎无法 运行 容器处于 daemon/standalone 模式。我该怎么做?

我正在使用它 运行 独立模式下的容器

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

我必须登录容器并启动网络服务器服务 运行。

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

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

因此,为了能够做到这一点,可以在您的启动服务脚本中使用以下内容:

#!/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 更干净,更少 hackish,我个人更喜欢那个替代方案。

另一种选择是 不将 httpd 作为服务启动,而是提供 -DFOREGROUND 参数。这将使 httpd 附加到 shell(而不是分叉到后台进程)。

/usr/sbin/httpd -DFOREGROUND

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