Подтвердить что ты не робот

Изображение Docker CentOS не запускает httpd

Я пытаюсь запустить простой образ Docker с Apache и программой PHP. Он работает нормально, если я запустил

docker run -t -i -p 80:80 my/httpd /bin/bash

затем вручную запустите Apache

service httpd start

однако я не могу заставить httpd запускаться автоматически при запуске

docker run -d -p 80:80 my/httpd

Apache запускается, тогда контейнер существует. Я пробовал кучу разных CMD в моем файле докеров

CMD /etc/init.d/httpd start
CMD ["service" "httpd" "start"]
CMD ["/bin/bash", "/etc/init.d/httpd start"]
ENTRYPOINT /etc/init.d/httpd CMD start
CMD ./start.sh

start.sh

#!/bin/bash
/etc/init.d/httpd start

Однако каждый экземпляр docker будет существовать после запуска apache

Я пропустил что-то действительно очевидное?

4b9b3361

Ответ 1

Вам нужно запустить apache (httpd) напрямую - вы не должны использовать init.d script.

Два варианта:

  • вам нужно запустить apache на переднем плане: /usr/sbin/apache2 -DFOREGROUND ... (или/usr/sbin/httpd в CentOS)
  • вам нужно запустить все службы (включая apache, настроенные как автоматический запуск), выполнив /sbin/init в качестве точки входа.

Смотрите этот хороший пост: http://www.kstaken.com/blog/2013/07/06/how-to-run-apache-under-docker/

Ответ 2

Добавьте эту строку в нижней части вашего Dockerfile для запуска Apache на переднем плане в CentOS

ENTRYPOINT ["/usr/sbin/httpd", "-D", "FOREGROUND"]

Ответ 3

Простой Dockerfile для запуска httpd на centOS

FROM centos:latest
RUN yum update -y
RUN yum install httpd -y
ENTRYPOINT ["/usr/sbin/httpd","-D","FOREGROUND"]

Команды для построения изображений и запуска контейнера

Построить

docker build . -t chttpd:latest

Запуск контейнера с использованием нового изображения

docker container run  -d -p 8000:80 chttpd:latest