Может запускать Nginx вручную внутри контейнера Docker, но не автоматически через CMD - PullRequest
0 голосов
/ 16 ноября 2018

Я развертываю Nginx внутри контейнера Docker (в OpenShift).Если я использую ENTRYPOINT ["sleep", "infinity"] в своем Dockerfile, а затем запускаю nginx -g "daemon off;" внутри своего контейнера, Nginx запускается внутри контейнера, как и ожидалось.Однако, если я использую ENTRYPOINT ["nginx", "-g", "daemon off;"] в моем Dockerfile, контейнер выдаст это сообщение об ошибке во время запуска:

nginx: [emerg] bind () до 0.0.0.0:8000 не удалось (98: адресуже используется)

В чем может быть причина этого несоответствия?

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Вы должны использовать CMD ["nginx", "-g", "daemon off;"] и оставить ENTRYPOINT по умолчанию.

0 голосов
/ 20 ноября 2018

Я нашел обходной путь. Запуск nginx косвенно с ENTRYPOINT ["/usr/local/bin/start.sh"] работает, когда start.sh выглядит следующим образом:

#!/bin/bash
nginx
sleep infinity

Странно, но этот вызов nginx внутри start.sh по-прежнему выдает те же сообщения об ошибках, но поскольку за ним следует sleep infinity, сценарий ENTRYPOINT теперь может завершиться успешно. Только если я вообще не вызываю nginx, сообщения об ошибках исчезают, но затем Nginx также не запускается. Действительно странно.

Кстати, я использую версию Debian nginx и настраиваю директиву user в /etc/nginx/nginx.conf в Dockerfile, а также несколько разрешений для каталогов для удовлетворения требований OpenShift (где образы контейнеров не запускаются как root но как случайные идентификаторы).

ОБНОВЛЕНИЕ Основная причина оказалась ошибкой, из-за которой один и тот же экземпляр контейнера дважды запускался внутри модуля. Это (конечно, задним числом) привело к тому, что один и тот же сервер запускался дважды на одном и том же узле и, следовательно, к сообщению об ошибке связывания во «втором» контейнере. До сих пор я всегда наблюдал только «второй» контейнер и поэтому столкнулся с ошибкой. После устранения проблемы ENTRYPOINT ["nginx", "-g", "daemon off;"] теперь также работает.

...