У меня установлен Nginx в контейнере Docker, и я пытаюсь запустить его так:
docker run -i -t -p 80:80 mydockerimage /usr/sbin/nginx
Проблема в том, что способ работы Nginx заключается в том, что первоначальный процесс немедленно порождает главный процесс Nginx и несколько рабочих процессов, а затем завершается. Поскольку Docker отслеживает только PID исходной команды, контейнер останавливается.
Как предотвратить остановку контейнера? Мне нужно указать ему привязаться к первому дочернему процессу или остановить исходный процесс Nginx.
daemon off
nginx не поддерживает .Чтобы расширить ответ Чарльза Даффи, Nginx использует
daemon off
директиву для запуска на переднем плане. Если это неудобно помещать в файл конфигурации, мы можем указать это прямо в командной строке. Это упрощает запуск в режиме отладки (передний план) и прямое переключение в рабочий режим (фон) путем изменения аргументов командной строки.Чтобы запустить на переднем плане:
Для работы в фоновом режиме:
источник
CMD
будетCMD ["nginx", "-g", "daemon off;"]
для докераЧтобы расширить ответ Джона, вы также можете использовать
Dockerfile
CMD
следующую команду (если вы хотите, чтобы она запускалась самостоятельно без дополнительных аргументов)источник
Добавление этой команды в Dockerfile может отключить ее:
источник
К вашему сведению, на сегодняшний день (22 октября 2019 г.) все официальные образы докеров Nginx содержат строку:
например https://github.com/nginxinc/docker-nginx/blob/23a990403d6dbe102bf2c72ab2f6a239e940e3c3/mainline/alpine/Dockerfile#L117
источник
Здесь у вас есть пример файла Dockerfile, который запускает nginx. Как упоминал Чарльз, он использует
daemon off
конфигурацию:https://github.com/darron/docker-nginx-php5/blob/master/Dockerfile#L17
источник
Чтобы добавить ответы Томера и Чарльза,
Синтаксис для запуска nginx на открытом воздухе в контейнере Docker с использованием точки входа:
Не имеет прямого отношения, но для запуска нескольких команд с Entrypoint:
источник
Также неплохо использовать supervisord или runit [1] для управления службами.
[1] https://github.com/phusion/baseimage-docker
источник
Поскольку нет целого Dockerfile, вот мое полное
Dockerfile
решение проблемы.Красиво и работает. Спасибо за все ответы здесь, чтобы решить последнюю проблему с nginx.
И запустите его с помощью:
источник