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