Docker nginx 公式イメージで nginx-debug を使う
Nginx でちょっとでも複雑な設定を書こうとすると、通常のログでは状況を把握しにくい。
より詳細なデバッグログを出すには nginx-debug
バイナリが必要で、通常 nginx start
しているのを nginx-debug start
して、debug level specification
を指定してやる必要がある。
Pre-built Linux packages provide out-of-the-box support for debugging log with the nginx-debug binary (1.9.8) which can be run using commands
To avoid this, either the line redefining the log should be commented out, or the debug level specification should also be added:
docker.io
上のイメージには 1.9.8
からバイナリがあるのが確認できる。
$ docker run -it --rm nginx:1.9.7 whereis nginx-debug nginx-debug: $ docker run -it --rm nginx:1.9.8 whereis nginx-debug nginx-debug: /usr/sbin/nginx-debug
どうも https://github.com/nginxinc/docker-nginx
のリリースは必ずしも Pull Request を作ってリリースしている訳ではないらしく時系列が負いにくくいつからかはわからないが、このコミット以降 docker-entrypoint.sh
の第一引数を参照するようになった模様。
docker-entrypoint.sh
の引数に nginx-debug
を指定すればいいだけなので、こう。ENTRYPOINT
自体を書き換える必要はない。
FROM nginx:1.19.1 COPY ./default.conf /etc/nginx/conf.d/default.conf CMD ["nginx-debug", "-g", "daemon off;"]
デバッグログは常に必要な訳ではないので(むしろ邪魔)、docker build --target
を活用してこう書くことが多い。
FROM nginx:1.19.1 as production-pseudo COPY ./default.conf /etc/nginx/conf.d/default.conf # -- FROM production-pseudo as development # -- FROM development as debug CMD ["nginx-debug", "-g", "daemon off;"]
実際に使っている Nginx のバージョンが古い場合、nginx.org
のリポジトリであれば多少バージョンが古くても nginx-debug
バイナリも含めてパッケージを配布してくれており、これが使える。バージョンを上げられるならこれを機に上げてしまったほうがよいと思う。
FROM debian:10.4 RUN apt-get update && \ apt-get install -y --no-install-recommends \ curl \ gnupg2 \ ca-certificates \ lsb-release \ software-properties-common \ && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --keyserver-options timeout=10 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 && \ add-apt-repository "deb https://nginx.org/packages/debian/ buster nginx" RUN apt-get update && \ apt-get install -y --no-install-recommends \ nginx=1.16.1-1~buster \ && \ apt-get clean && \ rm -rf /var/lib/apt/lists/*