Laravel

dockerコンテナでlaravelを起動時にPermission エラーが出る場合

更新日:

laravelスタート画面でPermission エラー

コンテナでlaravel を立ち上げると以下の様なエラーに遭遇しました。
laradockでも自分で構成したコンテナでも同様でしたので何か原因があるのでしょう。

laravelのバージョンによっては回避出来るのかもしれませんが、管理人が主に使っている5.5だと確実に発生します。
このエラーそのものは深刻なものではありませんがlaravelが立ち上がらないので対処しなければ作業が進みません。

エラーの原因と対策

エラーの原因はlaravel.logファイルにアクセス権がないことです。
適切なアクセス権限を与えてあげれば解決するはずです。

WebアプリケーションフレームワークLaravelの中身はPHPファイルの集まりです。
そしてPHPファイルを実行するのはApacheやnginxなどのWeb(アプリケーション)サーバーです。

Web(アプリケーション)サーバーから実行出来るようにアクセス権限を調整してやります。
アプリケーションコンテナに入りドキュメントルート(/var/www/html)を確認します。

作成したlaravelプロジェクト(今回の場合myapp)だけが所有者がrootになっていませんか?

root@xxxxxxxxxx:/var/www# ls -la
total 20
drwxr-xr-x  4 laradock laradock 4096 Jun 18 01:21 .
drwxr-xr-x  1 root     root     4096 Jun 17 14:33 ..
drwxr-xr-x 66 laradock laradock 4096 Jun 18 01:09 laradock
drwxr-xr-x 12 root     root     4096 Jun 18 01:23 myapp

通常、シェルでコンテナに入ったらrootユーザーになっています。
そのままcomposerコマンドを実行したため、作成されたプロジェクトファイルの所有者がrootになっているのです。

コンテナがDebian系であればWeb(アプリケーション)サーバーはwww-dataユーザーで実行されます。
作成したプロジェクトファイルの所有者をwww-dataに変更することでエラーは解決します。

アプリケーションのコンテナでシェルに入り

cd /var/www/html
chown -R www-data.www-data myapp

とします。

これでスタートページが立ち上がるはずです。

ポイント

コンテナがDebian系でない場合はapache、nginxに所有権が必要です。
cat /etc/passwdなどでユーザーを確認してください。

管理人の環境では所有者をwww-dataではなくlaradockとしても起動しました。

ローカルで編集するなら自分自身のアクセス権にしておけば良い

訂正です。(2019/06/18)

コンテナ内のファイル権限はローカルにマウントしたボリュームにも影響をします。
上の例でプロジェクトの所有者が「www-data」や「laradock」だとローカルにマウントしたファイルの書き換えが出来ませんでした。

コンテナ内でなくマウントしたローカルボリューム側で自分自身のユーザー権限に変えてしまえば良かったようです。
コンテナ内の権限も適切に変更されます。

Laravelの動作にも問題がないことを確認しています。

追記。(2019/06/20)

所有権ではなく実行権限で同様のエラーが発生。
同じくローカルボリューム側で変更することで解消。

chmod 777 ./myapp/storage

-Laravel

Copyright© Webエンジニア TKJ , 2019 All Rights Reserved.