24

我正在尝试使用 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 将启动,然后容器存在。CMD我在我的 docker 文件中尝试了一堆不同的 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

但是每次 docker 实例都会在 apache 启动后存在

我错过了一些非常明显的东西吗?

4

3 回答 3

23

您需要直接运行 apache (httpd) - 您不应该使用 init.d 脚本。

两种选择:

  1. 您必须在前台运行 apache:(/usr/sbin/apache2 -DFOREGROUND ... 或 CentOS 中的 /usr/sbin/httpd)
  2. /sbin/init您必须通过作为入口点执行来启动所有服务(包括配置为自动运行的 apache) 。
于 2014-01-22T17:23:28.520 回答
16

在您的底部添加此行以Dockerfile在 CentOS 的前台运行 Apache

ENTRYPOINT ["/usr/sbin/httpd", "-D", "FOREGROUND"]
于 2015-11-12T20:27:11.890 回答
0

在 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
于 2019-09-20T08:45:20.003 回答