好的,我几乎用尽了所有线程和文章,但是仍然无法使我的apache网络服务器在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"]
我的starservice脚本只有
#!/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
这是经典的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的方法是清洁和Les hackish的 比tail -f-approach和我个人更喜欢的选择。
tail -f
另一种选择是,您不 将httpd作为服务启动, 而是提供-DFOREGROUND参数。这将使httpd附加到外壳程序(而不是派生到后台进程)。
-DFOREGROUND
/usr/sbin/httpd -DFOREGROUND
有关前台模式下的http的更多信息,请检查此问题。