2015-08-26 3 views
0

Я создал Dockerfile для изображения для запуска PHP7 на FPM + Nginx, но я не могу заставить изображение правильно запускать службы.Как запустить сервисы на образ Docker?

Как это должно быть сделано точно?

Вот та часть, где я это делаю в данный момент:

CMD service php7-fpm start; \ 
    service php7-fpm status; \ 
    service nginx start; \ 
    service nginx status 

ответ

0

При управлении несколькими услугами вы хотите пользователя supervisord.

В вашем файле Dockerfile.

Additional commands... 
RUN apt-get update && apt-get install -y supervisor 
ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf 
Additional commands... 
CMD ["/bin/supervisord", "-c /etc/supervisor/conf.d/supervisord.conf"] 

supervisord.conf

[supervisord] 
nodaemon=true 

[program:php7] 
command=<command to start php7> 
autostart=true 
autorestart=true 
<repeat for additional services>... 

Это обеспечит контейнер не выход сразу запускается все. Помните, что Docker предположил, что является одной технологической средой с этим процессом, запущенным на переднем плане, а не фоном в качестве сервиса.

+0

бу. Кажется, супервизор - это ответ. но почему бы не начать работу CMD service nginx? – igorsantos07

+0

, как указано выше, не работает, потому что Docker ожидает, что приложения будут работать на переднем плане. когда вы запускаете приложение в качестве услуги, оно запускается в фоновом режиме, и контейнер выходит. поэтому, если вы хотите, чтобы контейнер не вставал, когда вы ходите «docker run -td mycontainer», вам нужно убедиться, что служба работает на переднем плане, а не как служба. Кроме того, если вы просто хотите запустить nginx, и больше ничего не можете пойти: 'CMD [" nginx "," -g "," daemon off; "]', еще раз заметив, что процесс не демонанизирован, а работает на переднем плане. –

+0

Получил! Я думал, что «докер должен быть одним процессом env», вы имели в виду, что это соглашение, а не техническое ограничение. – igorsantos07

2

вам нужен менеджер процессов, таких, как руководитель, s6, DaemonTools, или любой другой

посмотреть документ для руководителя, например,

https://docs.docker.com/articles/using_supervisord/

+0

В чем преимущество использования другого пакета, такого как супервизор, вместо встроенных заданий System V/upstart, которые являются распространенным прецедентом для Nginx/PHP? Кроме того, есть ли причина для того, что «CMD» не работает в первую очередь? – igorsantos07

+0

Что делает 'docker logs container_id'? – user2915097

+0

ничего ......... – igorsantos07

Смежные вопросы