停止せずにDockerコンテナー内でNginxを実行する方法


130

DockerコンテナーにNginxをインストールしていて、次のように実行しようとしています。

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

問題は、Nginxが機能する方法であり、初期プロセスがマスターNginxプロセスと一部のワーカーをすぐに生成し、その後終了することです。Dockerは元のコマンドのPIDのみを監視しているため、コンテナーは停止します。

コンテナの停止を防ぐにはどうすればよいですか?最初の子プロセスにバインドするように指示したり、Nginxの初期プロセスが終了したりしないようにする必要があります。

回答:


165

nginxすべての正常に動作するプログラムと同様に、自己デーモン化しないように構成できます。

http://wiki.nginx.org/CoreModuleでdaemon off説明されている設定ディレクティブを使用します


15
ありがとう!明確にするために、これは/etc/nginx/nginx.confを編集して「デーモンオフ」を追加することを意味します。上部(つまり、サーバーまたはその他のディレクティブ内ではない)
Seldo


7
@LeonidShevtsov ...つまり、1.0.9 より前の本番環境での使用承認されていません。インプレースアップグレードに関する常設の警告は、Docker Wayを実行している人には関係ありません。
Charles Duffy

現在、サーバー側で(nginx.org/en/docs/ngx_core_module.htmlに)リダイレクトが行われているようです。
Charles Duffy

175

Charles Duffyの回答を拡張するために、Nginxはdaemon offディレクティブを使用してフォアグラウンドで実行します。これを構成ファイルに入れるのが不便な場合は、コマンドラインで直接指定できます。これにより、デバッグモード(フォアグラウンド)での実行が簡単になり、コマンドライン引数を変更することで、プロダクションモード(バックグラウンド)での実行に直接切り替えることができます。

フォアグラウンドで実行するには:

nginx -g 'daemon off;'

バックグラウンドで実行するには:

nginx

3
誰かが実際に「-g」が何であるかを説明できますか?私はドキュメントでこのスイッチを見つけることができません.nginxがそれを使用しているこの1つの例のみです。
-red888

5
@ red888、グローバル構成オプションを設定します。
Charles Duffy

1
CMDCMD ["nginx", "-g", "daemon off;"]
港湾労働者の

55

Johnの答えを拡張するにはDockerfile CMD、次のようにコマンドを使用することもできます(追加の引数なしで自動起動する場合)

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




6

TomerとCharlesの回答を追加するには、

Entrypointを使用してDockerコンテナーのフォアグラウンドでnginxを実行する構文:

ENTRYPOINT nginx -g 'daemon off;' 

直接関係はありませんが、Entrypointで複数のコマンドを実行するには:

ENTRYPOINT /bin/bash -x /myscripts/myscript.sh && nginx -g 'daemon off;' 


0

Dockerコンテナーでnginxイメージを実行しようとしているすべての人にとって、それはサービスとして実行されます

Dockerfile全体が存在しないため、ここでDockerfile問題全体を解決します。

うまくいきました。最後のnginx問題を解決するためにここですべての回答に感謝します。

FROM ubuntu:18.04
MAINTAINER stackoverfloguy "stackoverfloguy@foo.com"
RUN apt-get update -y
RUN apt-get install net-tools nginx ufw sudo -y
RUN adduser --disabled-password --gecos '' docker
RUN adduser docker sudo
RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
USER docker
RUN sudo ufw default allow incoming
RUN sudo rm /etc/nginx/nginx.conf
RUN sudo rm /etc/nginx/sites-available/default
RUN sudo rm /var/www/html/index.nginx-debian.html
VOLUME /var/log
VOLUME /usr/share/nginx/html
VOLUME /etc/nginx
VOLUME /var/run
COPY conf/nginx.conf /etc/nginx/nginx.conf
COPY content/* /var/www/html/
COPY Dockerfile /var/www/html
COPY start.sh /etc/nginx/start.sh
RUN sudo chmod +x /etc/nginx/start.sh
RUN sudo chmod -R 777 /var/www/html
EXPOSE 80
EXPOSE 443
ENTRYPOINT sudo nginx -c /etc/nginx/nginx.conf -g 'daemon off;'

そしてそれを実行します:

docker run -p 80:80 -p 443:443 -dit
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.