1
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?

【Laravel】Docker環境で.envがリアルタイムに反映しない時の解決方法

Last updated at Posted at 2025-05-25

結論

docker-compose.yml
laravel:
    env_file:
      - ./.env

docker-compose.ymlで上記のようなenv_fileでの.env参照(Composeの環境変数)をやめるでした。
https://docs.docker.jp/compose/environment-variables.html

経緯

Laravelを5年くらい使ってますが、なぜか毎回コンテナを作り直さないと.envが反映されないという
聞いたことがあるような、無いような超不便環境に悩まされてました。
当然、下記は試していました。1

php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
composer dump-autoload
php artisan clear-compiled
php artisan optimize
php artisan config:cache
php artisan key:generate
rm -f bootstrap/cache/config.php

参考
https://qiita.com/Ping/items/10ada8d069e13d729701
https://qiita.com/ponsuke0531/items/1a665c68d12a74a29a42

暫定対策

唯一envを反映させることができるコマンド

docker compose down laravel nginx
docker compose up -d laravel nginx

→ビルドではなく、コンテナの再構築だけなので、30秒くらいで反映できるが、頻繁にテストしたい時などその時間すら惜しい状況。。。

気づいたきっかけ

一部bladeファイルを使っている箇所があるのですが、そこはなぜかリアルタイムに反映されていました。
そこから全てではない→そこに糸口がありそうと思い、色々調べたところ、

  • bladeは都度php-fpmが再起動して、envを読み直している
  • Composeの環境変数として渡すと、Laravelのアプリケーションは初回ブート時に.envを使って初期化を完了させてしまう

ということがわかりました。

注意点

docker-compose.yml
laravel:
    env_file:
      - ./.env

の便利どころはdocker compose up -dした時などでLaravelの外で.envを参照したい時です。
そういった使い方をしていると、問題が出てきてしまうので、それ用の環境変数はそれぞれ作成する形に変えるか、上記のまま利用するしかないです。

  1. 自分が調べた限りだと、LaravelのDocker環境で.envがリアルタイムに反映しない対策としてComposeの環境変数に言及した記事はなかったです。

1
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
1
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?