Apache 在Dockerfile内启动服务

Apache 在Dockerfile内启动服务,apache,docker,Apache,Docker,我正在构建一个Docker容器,并在这个容器中下载Apache服务。有可能在某个时候自动启动Apache服务吗?Systemctl start httpd在Dockerfile内不工作 基本上,我希望apache服务在docker容器启动时启动 FROM centos:7 MAINTAINER me <me@me.com> RUN yum update -y && yum install -y httpd php RUN (cd /lib/systemd/system

我正在构建一个Docker容器,并在这个容器中下载Apache服务。有可能在某个时候自动启动Apache服务吗?Systemctl start httpd在Dockerfile内不工作

基本上,我希望apache服务在docker容器启动时启动

FROM centos:7
MAINTAINER me <me@me.com>
RUN yum update -y && yum install -y httpd php
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
EXPOSE 80
EXPOSE 443
CMD ["/usr/sbin/init"]
来自centos:7
维护我
运行yum update-y&&yum安装-y httpd-php
运行(cd/lib/systemd/system/sysinit.target.wants/;for i in*;do[$i==systemd-tmpfiles-setup.service]| rm-f$i;完成)\
rm-f/lib/systemd/system/multi-user.target.wants/*\
rm-f/etc/systemd/system/*.wants/*\
rm-f/lib/systemd/system/local fs.target.wants/*\
rm-f/lib/systemd/system/sockets.target.wants/*udev*\
rm-f/lib/systemd/system/sockets.target.wants/*initctl*\
rm-f/lib/systemd/system/basic.target.wants/*\
rm-f/lib/systemd/system/anaconda.target.wants/*;
卷[“/sys/fs/cgroup”]
暴露80
揭露443
CMD[“/usr/sbin/init”]
尝试使用
CMD[“/usr/sbin/httpd”、“-DFOREGROUND”]

您还可以运行:

docker run -d <image name> /usr/sbin/httpd -DFOREGROUND
docker run-d/usr/sbin/httpd-DFOREGROUND

根据Docker参考(),在您描述的场景中,您将使用ENTRYPOINT,因为您希望web服务器“不可变”启动。CMD用于可能更改/被覆盖的命令或命令行选项:

docker run的命令行参数将附加在exec表单入口点中的所有元素之后,并将覆盖使用CMD指定的所有元素。这允许将参数传递给入口点,即docker run-d将把-d参数传递给入口点

如果您必须覆盖入口点,例如用于测试/诊断,请使用specific--ENTRYPOINT选项

进一步:

您可以使用ENTRYPOINT的exec形式来设置相当稳定的默认命令和参数,然后使用CMD的任一形式来设置更容易更改的其他默认值

因此,固定服务/应用程序部分的入口点,可重写命令或选项的CMD

使用ENTRYPOINT和CMD可以设置“固定”命令部分(包括选项)和“可变”部分。像这样:

FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]
<>这意味着,在你的情况下,你可以考虑:

ENTRYPOINT ["/usr/sbin/httpd"] 
CMD ["-DFOREGROUND"]
这允许您执行以下操作:

docker run -d <image name>
docker运行-d
当您希望在前台运行web服务器时

docker run -d <image name> -DBACKGROUND
docker run-d-DBACKGROUND

如果您希望同一台服务器运行时使用-DBACKGROUND选项仅覆盖-DFOREGROUND部分。

So
ENTRYPOINT[“/usr/sbin/httpd”,“-DFOREGROUND”]
?您应该能够同时使用ENTRYPOINT和CMD,但
CMD
应该可以完成这项工作。也许entrypoint说的不对,我会编辑。@J.Doe我唯一能怀疑的是
httpd
的位置,你能检查一下它是否在这个地方吗(
/usr/sbin/httpd
)?是的,我相信默认情况下它就在这里。