質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%

Q&A

解決済

2回答

771閲覧

DockerでLaravelの開発の際のパーミッションとオーナーの設定についてのご相談

keykey

総合スコア7

0グッド

0クリップ

投稿2024/05/26 07:50

編集2024/05/26 07:55

実現したいこと

Dockerの初学者です。よろしくお願いいたします。

windows10 homeでWSL2を入れてWSL上で開発をしております。
エディターはVS-codeです。

DockerでLaravel10、mysql、nginx、phpadminをdocker compose でRUNし、Laravelの最初のページやDBにアクセスできるようになりました。
しかし開発において悩みがあります。

例えば、文字列や画像を保存するCRUDの開発をしていく中で
以下のようなコマンドを打つ必要がありました。

sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache
sudo chown -R www-data:www-data public/images
sudo chmod -R 775 public/images

発生している問題・分からないこと

ここまでは理解できるのですが

その後、WSL上にあるプロジェクトファイルをVS-code上で編集して上書き保存をしようとすると
VS-CODEの右下にアラートが表示されました。

該当のソースコード

vs

1Failed to save 'example.file': Unable to write file (No Permissions (FileSystemError): Error: 2EACCS: permission denied, open 'path/to/example.file'

これは、すべてのファイルで起きるわけではなく、テーブル作成のmigrationファイルだったり、
web.phpなどのルーティングファイルなどで上書きができませんでした。

試したこと・調べたこと

  • [x ] teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

そのため以下のコマンドを実施しました。

1709 sudo chown -R watashi:watashi /home/watashi/Documents/laravel-docker
1710 sudo chmod -R 775 /home/watashi/Documents/laravel-docker

すると、今度はdocker上でwww-dataで実行しなければいけないところが変わって
動かなくなってしまったり、先ほど設定したはずの以下の操作をもう一度しなければ
ならなくなりました。
sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache
sudo chown -R www-data:www-data public/images
sudo chmod -R 775 public/images

もしかして、Windows上で開発をしていることが問題ではないか?
と思いUbuntu-desktopでも試したのですが同様の現象がおきました。

これが現在起きている問題になります。
パーミッションやオーナーの設定変更などをせずに、
スムーズな開発をするにはどのようにしたらよいのでしょうか?皆様よろしくお願いいたします。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

基本的にはホストのユーザーIDと、コンテナ内のPHP実行ユーザーのユーザーIDを何らかの形で揃える必要があります。
プログラムが書き込みを行うディレクトリはログやキャッシュなど限られた部分になるので、そこだけパーミッションを777にするなどでもある程度は回避可能です。

参考までに、Laravel sailではデフォルトで、sail ユーザーの権限で artisan serve を実行しています。
ソースコード

また、.env などに WWWUSERという変数を渡しておくと、これが sail ユーザーのユーザーIDになります。そのため、現在のユーザーのユーザーIDを WWWUSER として定義する、といったやり方でパーミッション問題を回避しています。
ソースコード

他のやり方としてはdevcontainerを使う方法もあります。
(devcontainer自体にユーザーIDをホストと合わせる機能がある)

投稿2024/05/26 16:25

Eggpan

総合スコア3257

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keykey

2024/05/27 04:23

ご回答いただき誠にありがとうございます。現象が改善しました!コードの共有ありがとうございます。こちらを参考にユーザーを同じに合わせて改善しました。実際のやり方がわからなかったのでとても助かりました。 devcontainerについては過去に一度挑戦したのですが、設定が不十分で動作しませんでした。こちらもまた挑戦してみたいと思います。どうもありがとうございました。
guest

0

一番簡単な方法は、Dockerで動いてるnginxやphp-fpmの実行ユーザをwww-dataからwatashiに変える(=uidを合わせる)ことじゃないでしょうか。私はDockerじゃなくvargrant使うことが多いですが、つどnginxやphp-fpm側を変更して合わせています。あまり良い方法じゃない気もしますが、これなら簡単にできるし、所詮はローカル環境なので大きな問題も起きないだろうと思ってますが、正直なところはよく分からないです。

で、正しいやり方?は以下のサイトが参考になりませんでしょうか?

参考)
https://zenn.dev/yuchiki/articles/vscode-remote-container
https://zenn.dev/forrep/articles/8c0304ad420c8e

Remote Containersを導入して設定を詰めればおそらく解決はできる問題のように思えます。私は面倒なのは嫌なのでやりませんがw

投稿2024/05/26 15:16

編集2024/05/26 15:17
AbeTakashi

総合スコア4902

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keykey

2024/05/27 04:18

すぐにご回答いただきまして誠にありがとうございます。早速、実行ユーザーを同じユーザーに合わせて、 各種権限のエラーやファイルの書き込みの不可が起きなくなりました。ありがとうございました。 Remote Containersはこの件で挑戦したのですが設定がうまくいかず挫折しました。どうもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問