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

Как запустить Nginx в контейнере Docker без остановки?

У меня установлен Nginx на контейнере Docker, и я пытаюсь запустить его следующим образом:

docker run -i -t -p 80:80 mydockerimage /usr/sbin/nginx

Проблема в том, что способ Nginx работает, заключается в том, что начальный процесс немедленно порождает мастер-процесс Nginx и некоторые рабочие, а затем завершает работу. Поскольку Docker просматривает только PID исходной команды, контейнер останавливается.

Как предотвратить остановку контейнера? Мне нужно сказать, чтобы он привязывался к первому дочернему процессу или останавливал исходный процесс Nginx.

4b9b3361

Ответ 1

nginx, как и все хорошо управляемые программы, может быть настроен не на самодеминирование.

Используйте директиву конфигурации daemon off, описанную в http://wiki.nginx.org/CoreModule.

Ответ 2

Чтобы расширить ответ Чарльза Даффи, Nginx использует директиву daemon off для запуска на переднем плане. Если это неудобно поместить в файл конфигурации, мы можем указать это непосредственно в командной строке. Это позволяет легко работать в режиме отладки (на переднем плане) и напрямую переключаться на работу в производственном режиме (на заднем плане) путем изменения аргументов командной строки.

Для запуска на переднем плане:

nginx -g 'daemon off;'

Для запуска в фоновом режиме:

nginx

Ответ 3

Чтобы развернуть ответ Джона, вы также можете использовать команду Dockerfile CMD следующим образом (в случае, если вы хотите, чтобы он запускался без дополнительных аргументов)

CMD ["nginx", "-g", "daemon off;"]

Ответ 4

Добавление этой команды в Dockerfile может отключить ее:

RUN echo "daemon off;" >> /etc/nginx/nginx.conf

Ответ 7

Чтобы добавить ответы Томера и Чарльза,

Синтаксис для запуска nginx в forground в контейнере Docker с использованием Entrypoint:

ENTRYPOINT nginx -g 'daemon off;' 

Не связано напрямую, но для запуска нескольких команд с Entrypoint:

ENTRYPOINT /bin/bash -x /myscripts/myscript.sh && nginx -g 'daemon off;'