Как запустить 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"]