0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Nginx】DockerfileのCMDの先頭は/usr/sbin/nginxではなくnginx

Last updated at Posted at 2023-02-15

はじめに

Nginxの公式イメージを使用する場合にCMDの記述の仕方によって正常に動作しない場合があるのでその理由と対処について以下に記述します。

CMDの先頭は/usr/sbin/nginxではなくnginx

CMDの先頭を/usr/sbin/nginxとするとDockerコンテナ内の/docker-entrypoint.shが正常に機能しないことがあります。
そのためCMDの先頭は/usr/sbin/nginxではなくnginxとする必要があります。

公式イメージの/docker-entrypoint.sh内に次のような記述があります。

docker-entrypoint.sh

...

if [ "$1" = "nginx" -o "$1" = "nginx-debug" ]; then

...

シェルスクリプトの$1は1つ目の引数を表します。
Dockerfile内でENTRYPOINT [ "/docker-entrypoint.sh" ]と記述されているので、CMDの記述は/docker-entrypoint.shの引数となります。
よって上記条件式の$1CMDの先頭を表します。
CMDの先頭がnginxまたはnginx-debugでないとこの条件式の中の処理は実行されません。
この条件式の中で/docker-entrypoint.d/配下のファイルが実行されるためCMD ["/usr/sbin/nginx", "-g", "daemon off;"]などとするとこれらのファイルが実行されません。

/docker-entrypoint.d/に配置されるファイルは次の3つです。

20-envsubst-on-templates.sh設定ファイル内で環境変数を使用するための処理が記述されています。
CMD/usr/sbin/nginxで始めてしまうとこのファイルが実行されず、環境変数が展開された設定ファイルが作成されません。

上記のことからCMD/usr/sbin/nginxではなくnginxで始める必要があります。

また以上のことはcompose.ymlcommandやコンテナ起動時にコマンドを指定する場合も同様です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?