WEB/システム/IT技術ブログ

wsl2とDockerの開発環境で権限エラーが発生する

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例の紹介でした

B!

Comment

コメントはありません

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Monthly Archives