Изображение 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
Я пропустил что-то действительно очевидное?
Ответы
Ответ 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