在docker中运行apache

sam*_*sam 2 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"]
Run Code Online (Sandbox Code Playgroud)

我的星际服务脚本就是这样

#!/usr/bin/sh
service httpd start
Run Code Online (Sandbox Code Playgroud)

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

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

docker run -p 80:80 -d -t webserver
Run Code Online (Sandbox Code Playgroud)

我必须登录容器并启动服务以运行Web服务器.

docker run -p 80:80 -i -t webserver bash
service httpd start
Run Code Online (Sandbox Code Playgroud)

was*_*ren 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
Run Code Online (Sandbox Code Playgroud)

请注意,还有其他方法可以解决此问题.一种方法是使用supervisord来保持您的进程活跃.该supervisord的方法是清洁和Les hackish的tail -f-approach和我个人更喜欢的选择.

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

/usr/sbin/httpd -DFOREGROUND
Run Code Online (Sandbox Code Playgroud)

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