nginx をフォアグラウンドで動かす (Dockerfile用)


スマートな方法

「シンプルですが、なかなかよい方法では。(自賛)」、と書いた方法が、かなりダサいことが判明したので修正します…

起動用のシェルスクリプトを書いて、-g オプションで "daemon off" ディレクティブを指定します。

$PREFIX/sbin/nginx-runner
#!/bin/sh

if [ -f $PREFIX/logs/nginx.pid ]; then
    rm -f $PREFIX/logs/nginx.pid
fi

$PREFIX/sbin/nginx -g "daemon off;"

これだと別に設定ファイルを用意しなくていいのでスマートですね……

最後のセミコロンをお忘れ無く!

古くてダサい方法…

小さな設定ファイルを作ります。

$PREFIX/conf/nginx-foreground.conf
daemon off;
include nginx.conf;

起動用のシェルスクリプトを書きます。

$PREFIX/sbin/nginx-runner
#!/bin/sh

if [ -f $PREFIX/logs/nginx.pid ]; then
    $PREFIX/sbin/nginx -s quit
    rm -f $PREFIX/logs/nginx.pid
fi

$PREFIX/sbin/nginx -c $PREFIX/conf/nginx-foreground.conf

DockerfileCMD でこれを使うと nginx-foreground.conf を読むので、フォアグラウンドで動きます。

一方、手動で動かすときには、何も指定しなければ nginx.conf を読むので、バックグラウンドで動作します。

シンプルですが、なかなかよい方法では。(自賛)