在Docker容器上启动Apache

时间:2017-12-26 09:57:15

标签: apache docker

我正在使用Docker来使用Apache和PHP构建映像,但Apache的antomatic启动存在问题。这是Dockerfile:

FROM ubuntu:16.04

RUN apt-get update

# Apache
RUN apt-get -y install apache2

# Apache config
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf
RUN apache2ctl configtest
RUN a2dissite 000-default
COPY otpuskatame_backend.conf /etc/apache2/sites-available
RUN a2ensite otpuskatame_backend
RUN a2dissite 000-default
RUN rm /etc/apache2/sites-available/000-default.conf

# PHP
RUN apt-get -y install php libapache2-mod-php php-mcrypt

# Load container
CMD service apache2 start

EXPOSE 80

图像已成功构建,但在使用以下命令运行时,它会断开:

sudo docker run -d -v /var/www/project/:/var/www:rw -p 80:80 --name=lamp1 lamp1

状态:

CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS                     PORTS                  NAMES
1a3679275b1d        lamp1                   "/bin/sh -c 'servi..."   8 seconds ago       Exited (0) 6 seconds ago                          lamp1 

日志看起来不错:

 * Starting Apache httpd web server apache2

如果我从Dockerfile中删除 CMD 行,然后登录到容器并手动运行 service apache2 start ,一切正常。 但是如何自动启动呢?

2 个答案:

答案 0 :(得分:2)

这是因为docker中的主要服务因为这个docker正在退出而被杀死。为此你需要在前台运行服务

尝试在dockerfile中添加它并重建它

CMD /usr/sbin/apache2ctl -D FOREGROUND

有关详细信息,请参阅以下网站。

https://writing.pupius.co.uk/apache-and-php-on-docker-44faef716150

答案 1 :(得分:0)

这是由于docker中的主要服务被杀死,并且由于此docker正在退出,您可以执行以下操作:

docker run -d -t -p 80:80 --name apache image bash -c "service apache2 start && sleep 60"

容器将生存60秒。