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


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

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

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

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

6 72

6 ответов:

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

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

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

расширить ответ, вы также можете использовать DockerfileCMD команда, как показано ниже (в случае, если вы хотите, чтобы он самостоятельно начать без дополнительных аргументов)

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