
【インフラ】Dockerで生成したLaravel環境でログパーミッションエラー + 権限系の整理のメモ
2026-06-13
はじめに インフラはローカル環境をDockerなどで構築はできますが、詳しくないので、完全個人用のメモです。 間違った情報もあるとおもうので、参考にする際はご注意ください。 Laravelでログの書き込み権限でパーミッションエラーがでたのでこれを気に権限周りの整理。 また修正方法も記載しておきます。 今回のエラー原因 Laravel実行ユーザー ↓ www-data storage所有者 ↓ 1000(tm) だったため、 www-data が storage/logs/laravel.log に書き込めず、Permission denied が発生していました。 登場人物 Ubuntuユーザー DockerでLaravel環境を作成したUbuntuのユーザー。 Ubuntu環境で id と打つと情報の確認ができます。 今回の場合の例 tm@pc240127:~/Laravel13_sample$ iduid=1000(tm) gid=1000(tm) groups=1000(tm),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),100(users),1001(docker) ※Ubuntu環境 uid 1000 が Laravel のフォルダの所有者に最初はなっていました。 Laravelに書き込むユーザー PHP-FPMのユーザー www-data このユーザーが log フォルダなどに書き込めるようにパーミッションを調整しないといけない。 Docker内で以下のコマンドで確認ができます。 root@a3071f286021:/var/www/src# id www-datauid=33(www-data) gid=33(www-data) groups=33(www-data) ※Dockerコンテナ内 Docker内の自分自身のユーザー 自分自身を調べると www-data ではなく、今回は root になっていました。 ログはLaravelを実行しているユーザーが書き込むので、自分自身とは異なります。 名前の確認 root@a3071f286021:/var/www/src# whoamiroot ※Dockerコンテナ内 ユーザー情報の確認 root@a3071f286021:/var/www/src# iduid=0(root) gid=0(root) groups=0(root) ※Dockerコンテナ内 パーミッション調整 Laravelを実行しているPHP-FPMの実行ユーザーを確認 root@a3071f286021:/var/www/src# cat /usr/local/etc/php-fpm.d/www.conf | grep "^user"user = www-data ※Dockerコンテナ内 Laravelを実行しているグループを確認 root@a3071f286021:/var/www/src# cat /usr/local/etc/php-fpm.d/www.conf | grep "^group"group = www-data ※Dockerコンテナ内 Laravelが実行中に書き込むフォルダのパーミッションを確認 storage/:ログやアップロードされた画像、アプリデータのキャッシュなど bootstrap/cache/:Laravel本体のキャッシュ ※今回はログファイルの調整だが、まとめてやっておく。 storageフォルダの権限確認 root@a3071f286021:/var/www/src# ls -ld storagedrwxr-xr-x 5 1000 1000 4096 Jun 12 01:41 storage ※Dockerコンテナ内 bootstrap/cache/フォルダの権限確認 root@a3071f286021:/var/www/src# ls -ld bootstrap/cachedrwxr-xr-x 2 1000 1000 4096 Jun 12 01:41 bootstrap/cache ※Dockerコンテナ内 logファイルの権限確認 root@a3071f286021:/var/www/src# ls -l storage/logstotal 132-rwxr-xr-x 1 1000 1000 134758 Jun 12 01:41 laravel.log ※Dockerコンテナ内 パーミッションの変更 # Laravelを書き込むPHP-FPM実行ユーザーに所有者を変更 chown -R www-data:www-data storage bootstrap/cache # ディレクトリ # 所有者とグループ:r(読込)、w(書込)、x(実行) # その他:r(読込)、x(実行) # 775 = 所有者(rwx) グループ(rwx) その他(r-x) find storage bootstrap/cache -type d -exec chmod 775 { } \ ; # ファイル # 所有者とグループ:r(読込)、w(書込) # その他:r(読込) # 664 = 所有者(rw-) グループ(rw-) その他(r--) find storage bootstrap/cache -type f -exec chmod 664 { } \ ; パーミッション変更後の確認 フォルダ権限 root@a3071f286021:/var/www/src# ls -ld storage bootstrap/cachedrwxrwxr-x 2 www-data www-data 4096 Jun 12 01:41 bootstrap/cachedrwxrwxr-x 5 www-data www-data 4096 Jun 12 01:41 storage ※Dockerコンテナ内 ログファイル権限 root@a3071f286021:/var/www/src# ls -l storage/logs-rw-rw-r-- 1 www-data www-data 134758 Jun 12 01:41 laravel.log ※Dockerコンテナ内 パーミッションについて 【インフラ】パーミッション早見表 おまけ ユーザー覧確認 cat /etc/passwd ※Dockerコンテナ内 見方 root:x:0:0:root:/root:/bin/bash ↓ ユーザー名:x:UID:GID:説明:ホームディレクトリ:ログインシェル ※「:説明:ホームディレクトリ:ログインシェルは時々見る程度」 グループ一覧の確認 cat /etc/group ※Dockerコンテナ内 見方 root:x:0:↓ グループ名:x:GID さいごに 業務で常にしておかないと、何でこうするのか説明ができなくなりますね。色々エンジニアは大変。