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

时间:2017-06-05 20:07:42

标签: apache ubuntu docker dockerfile

我正在尝试创建一个自动启动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

3 个答案:

答案 0 :(得分:32)

问题在于:CMD service apache2 start当您执行此命令时,进程apache2将与shell分离。但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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

我的项目在安装了许多其他东西的地方稍有不同,但是apache的开始部分与上面的匹配。构建此映像并使用它后,服务器启动正常。

FROM ubuntu:latest

#install all the tools you might want to use in your container
RUN apt-get update
RUN apt-get install curl -y
RUN apt-get install vim -y
#the following ARG turns off the questions normally asked for location and timezone for Apache
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get install apache2 -y

#change working directory to root of apache webhost
WORKDIR var/www/html

#copy your files, if you want to copy all use COPY . .
COPY index.html index.html

#now start the server
CMD ["apachectl", "-D", "FOREGROUND"]