Apache Docker CentOS映像不自动启动httpd

Apache Docker CentOS映像不自动启动httpd,apache,docker,centos,dockerfile,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文件中尝试了一系列不同的CMDs CMD /etc/init.d/httpd start C

我正在尝试用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
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启动后都会存在docker实例

我遗漏了一些非常明显的东西吗?

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

两种选择:

  • 您必须在前台运行apache:
    /usr/sbin/apache2-DFOREGROUND…
    (或CentOS中的/usr/sbin/httpd)
  • 您必须通过将
    /sbin/init
    作为入口点来启动所有服务(包括配置为自动运行的apache)

  • Dockerfile
    的底部添加这一行,以便在CentOS的前台运行Apache

    ENTRYPOINT[“/usr/sbin/httpd”、“-D”、“前台”]
    
    在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
    

    谢谢Jiri!使用
    ENTRYPOINT[“/usr/sbin/httpd”]
    CMD[“-D”,“前台”]
    可以进行治疗仅供参考,有些人还运行:/sbin/some_deamon&&tail-f/var/log/foo@yvindSkaar
    和&tail-f…
    是一个很好的攻击,但请注意,它将在日志旋转事件时退出容器,因此,我不建议将其用于/var/log/apache2/access.logThankØyvindSkaar之类的日志文件,尽管Jiri的方法对于httpd非常有用,但我将您的示例用于不同的tigase容器。它工作得很好。也适用于跟踪日志文件;可能并没有logrotate(也并没有cron来运行它),所以您的磁盘将充满日志。使用CustomLog的管道日志功能会更好。看看httpd附带的rotatelogs(8)