Как запустить apache2 автоматически в контейнере-докере Ubuntu?

Я пытаюсь создать файл Docker, который автоматически запустит apache. Ничего не сработало. Но если я запишусь в контейнер и запустив service apache2 start, он будет работать. Почему я не могу запустить эту команду из моего файла Docker?

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

Ответ 1

Проблема здесь: 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

Ответ 2

Для меня последняя строка с CMD была неправильной:

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