如何在 ubuntu docker 容器中自动启动 apache2?

新手上路,请多包涵

我正在尝试创建一个将自动启动 apache 的 Dockerfile。没有任何效果。但是如果我登录到容器并运行 service apache2 start 它可以工作。为什么我不能从我的 Dockerfile 运行该命令?

 FROM ubuntu

# File Author / Maintainer
MAINTAINER rmuktader

# Update the repository sources list
RUN apt-get update

# Install and run apache
RUN apt-get install -y apache2 && apt-get clean

#ENTRYPOINT ["/usr/sbin/apache2", "-k", "start"]

#ENV APACHE_RUN_USER www-data
#ENV APACHE_RUN_GROUP www-data
#ENV APACHE_LOG_DIR /var/log/apache2

EXPOSE 80
CMD service apache2 start

原文由 Rayhan Muktader 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

问题出在这里: CMD service apache2 start 当你执行这个命令过程时 apache2 将从外壳中分离。但是 Docker 仅在主进程处于活动状态时才起作用。

解决方案是在 前台 运行 Apache。 Dockerfile 必须如下所示:(仅更改了最后一行)。

 FROM ubuntu

# File Author / Maintainer
MAINTAINER rmuktader

# Update the repository sources list
RUN apt-get update

# Install and run apache
RUN apt-get install -y apache2 && apt-get clean

#ENTRYPOINT ["/usr/sbin/apache2", "-k", "start"]

#ENV APACHE_RUN_USER www-data
#ENV APACHE_RUN_GROUP www-data
#ENV APACHE_LOG_DIR /var/log/apache2

EXPOSE 80
CMD apachectl -D FOREGROUND

原文由 Bukharov Sergey 发布,翻译遵循 CC BY-SA 4.0 许可协议

对我来说,最后一行 CMD 是错误的:

 # it helped me
CMD ["apachectl", "-D", "FOREGROUND"]

原文由 Radek 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题