我正在尝试创建一个将自动启动apache的Dockerfile。没事。但是,如果我登录到容器并运行service apache2 start它就可以了。为什么我不能从Dockerfile运行该命令?
service apache2 start
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
问题出在这里:CMD service apache2 start执行此命令时,进程apache2将与外壳分离。但是Docker仅在主进程处于活动状态时才能工作。
CMD service apache2 start
apache2
解决方案是在 前台 运行Apache 。Dockerfile必须看起来像这样:(仅更改了最后一行)。
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