dockerでlaravelの環境構築を行った際に、コンテナは立ち上がっているがどうもnginxと噛み合わないことがあったので書いてみました。
docker-compose.ymlの作成
nginx:
image: nginx:1.17-alpine
container_name: web
depends_on:
- php-fpm
ports:
- 80:80
volumes:
- ./src:/work
- ./docker/nginx/default.conf:/etc/nginx/default.conf
これはnginxのみの設定です。
php-fpmやmysqlなどその他の設定もありますが省略。そしてコンテナを立ち上げる。
laravelをインストールする流れは他と同じ。設定した全てのコンテナが立ち上げ、コンテナの中に入りcomposerでlaravelをインストール。
これで完了!!と思ったが、laravelが起動しない!!!!
このdocker-compose.ymlのnginxの記述をよく見ると、コンテナ側のnginxの設定ファイルのパスが間違っていますね。
- ./docker/nginx/default.conf:/etc/nginx/default.conf
ではなく、
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
こうです。正しくはこのdocker-compose.ymlです!!
nginx:
image: nginx:1.17-alpine
container_name: web
depends_on:
- php-fpm
ports:
- 80:80
volumes:
- ./src:/work
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
conf.dディレクトリが抜けていた!ケアレスミス!!!ではなく、nginxの設定ファイルの構成が理解出来ていませんでした。
なぜ、間違えたのか?
nginxの設定ファイルの構成を考えるとすぐ分かります。nginxの設定は、
etc
└─ nginx
├─ nginx.conf
└─ conf.d
├─ defalut.conf
├─ *.conf
:
nginx.confをまず読み込んでから、conf.dディレクトリの.confファイルをインクルードする流れです。つまり、このnginx.confとdefault.confがゴチャゴチャになっていました。私の場合、ホスト側の./docker/nginx/default.confではserverディレクティブの構成を記述していたので、これはコンテナ側のnginx/conf.d/default.confの内容ですね。
まとめ
初歩的なミス。nginxのファイル構成を調べればすぐ出て来ますが、原因がなかなか見つけられず時間がかかってしまいました...
そもそも、nginxをしっかり調べてからを立ち上げれば良かっただけです。