Docker CentOS映像不会自动启动httpd

时间:2014-01-22 10:23:29

标签: apache docker centos dockerfile

我正在尝试使用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

然而,在apache启动后,每次都会存在docker实例

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

3 个答案:

答案 0 :(得分:20)

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

两个选项:

  1. 你必须在前台运行apache:/usr/sbin/apache2 -DFOREGROUND ...(或CentOS中的/ usr / sbin / httpd)
  2. 您必须通过执行/sbin/init作为入口点来启动所有服务(包括配置为自动运行的apache)。
  3. 看到这篇不错的帖子:http://www.kstaken.com/blog/2013/07/06/how-to-run-apache-under-docker/

答案 1 :(得分:12)

Dockerfile的底部添加此行,以便在CentOS上的前台运行Apache

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

答案 2 :(得分: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