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

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

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

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

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

6 ответов


nginx, как и все благовоспитанные программы, могут быть настроены не для само-демонизации.

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


чтобы расширить ответ Чарльза Даффи, Nginx использует


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

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

здесь у вас есть пример файла Dockerfile, который запускает nginx. Как упоминал Чарльз, он использует daemon off конфигурация:

https://github.com/darron/docker-nginx-php5/blob/master/Dockerfile#L17


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

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

также неплохо использовать supervisord или runit[1] для управления услугами.

[1] https://github.com/phusion/baseimage-docker