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