簡體   English   中英

Docker CentOS 圖像不會自動啟動 httpd

[英]Docker CentOS image does not auto start httpd

我正在嘗試使用 Apache 和 PHP 程序運行簡單的 Docker 圖像。 如果我運行它工作正常

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 將啟動然后容器存在。 我在我的 docker 文件中嘗試了一堆不同的CMD

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

但是每次 docker 實例都會在 apache 啟動后存在

我錯過了一些非常明顯的東西嗎?

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

兩種選擇:

  1. 你必須在前台運行 apache: /usr/sbin/apache2 -DFOREGROUND ... (或 CentOS 中的 /usr/sbin/httpd)
  2. 您必須通過執行/sbin/init作為入口點來啟動所有服務(包括配置為自動運行的 apache)。

將此行添加到Dockerfile的底部以在 CentOS 的前台運行 Apache

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

在centOS上運行httpd的簡單Dockerfile

FROM centos:latest
RUN yum update -y
RUN yum install httpd -y
ENTRYPOINT ["/usr/sbin/httpd","-D","FOREGROUND"]

構建鏡像和運行容器的命令

建造

docker build . -t chttpd:latest

使用新鏡像運行容器

docker container run  -d -p 8000:80 chttpd:latest

在 Dockerfile 的末尾,插入下面的命令以啟動 httpd

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

這對我有用

入口點 /usr/sbin/httpd -D start && /bin/bash

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM