Windows上にて、wsl2とDockerで開発環境を構築した際に、ファイルの権限エラーが発生する事があります
wsl2とアプリケーションコンテナのユーザIDが異なるのが原因なのですが、その回避策のひとつを紹介します
環境は以下の通りです
- Windows 11 Home 64bit
- wsl 2.2.4.0
- Ubuntu 24.04 LTS
- Docker Desktop 4.33.1
- Laravel 9
例えば、LaravelプロジェクトをUbuntuに展開してる事を前提とします
Laravelで権限エラー
Laravelプロジェクトのコンテナを起動し、ブラウザでアクセスすると、以下のようなエラーが発生します
UnexpectedValueException The stream or file "/var/www/html/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: The stream or file "/var/www/html/storage/logs/laravel.log...
また、アプリケーションが生成したキャッシュファイルやログファイルなどにアクセスできず、ファイルを編集・削除できないといった事が発生します
ファイルの権限を確認すると、アプリケーションユーザが「www-data」のため、wsl2のユーザ(rootではない)ではそのファイルにはアクセスできません
$ ls -l ./storage/logs/ -rw-r--r-- 1 www-data www-data 12121212 Aug 12 12:12 laravel.log
解決策
ここでは、アプリケーションユーザとwsl2ユーザのユーザIDを揃えることで、権限エラーを解消します
まず、UbuntuのコマンドラインでユーザIDを確認します
$ id -u 1000
次に、アプリケーションコンテナのDockerfileに以下を追記し、ユーザ「www-data」のユーザIDを1000に変更します
RUN usermod -u 1000 www-data
コンテナをビルドすると、権限エラーが解消してると思います
この問題の解決方法はいくつかあるようですが、1例の紹介でした
コメントする