Как запустить 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.
расширить ответ, вы также можете использовать 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