2014-01-22 53 views
21

我想用Apache和PHP程序運行簡單的Docker映像。它工作正常,如果我跑Docker CentOS映像不會自動啓動httpd

docker run -t -i -p 80:80 my/httpd /bin/bash 

然後手動啓動Apache

service httpd start 

但我不能得到的httpd啓動而自動運行

docker run -d -p 80:80 my/httpd 

Apache會啓動,然後容器時存在。我在泊塢窗文件嘗試了很多不同CMD S的

CMD /etc/init.d/httpd start 
CMD ["service" "httpd" "start"] 
CMD ["/bin/bash", "/etc/init.d/httpd start"] 
ENTRYPOINT /etc/init.d/httpd CMD start 
CMD ./start.sh 

start.sh是

#!/bin/bash 
/etc/init.d/httpd start 

但是每一次的Apache後搬運工例如會存在啓動

我缺少的東西真的很明顯?

回答

19

你需要直接運行apache(httpd) - 你不應該使用init.d腳本。

兩個選項:

  1. 你必須在前臺運行Apache:/usr/sbin/apache2 -DFOREGROUND ...(或/ usr/sbin目錄/ CentOS中的httpd)
  2. 你必須啓動所有服務(包括Apache配置爲自動運行)通過執行/sbin/init作爲入口點。

看到這個好貼:http://www.kstaken.com/blog/2013/07/06/how-to-run-apache-under-docker/

+2

感謝吉日! 使用'ENTRYPOINT [「/ usr/sbin/httpd」]'&'CMD [「-D」,「FOREGROUND」]'treat a – dwitz

+0

僅供參考,一些人也運行:/ sbin/some_deamon && tail -f/var/log/foo –

+1

@ØyvindSkaar'&& tail -f ...'是一個很好的黑客,但請注意它會在日誌輪轉事件中退出容器,所以我不會推薦它用於/ var/log/apache2 /access.log – Jiri

10

在底部加入這行你Dockerfile的運行Apache在前臺在CentOS

ENTRYPOINT ["/usr/sbin/httpd", "-D", "FOREGROUND"]