Docker インスタンスをセットアップして実行すると、起動時に nginx は403 Forbidden
静的ファイルにアクセスするときに を表示します。
ではDockerfile
、 コマンドを使用してCOPY
すべてのファイルを に移動し/var/www/app
、次に コマンドを使用して静的ディレクトリRUN
に移動し、ユーザーがファイルを読み取れるchmod
ようにします。www-data
次のようDockerfile
になります:
...
COPY app /var/www/app
RUN chmod -R go+rX /var/www/app/static
...
調査したところ (インスタンス上で bash を対話的に実行)、www-data ユーザーは、root ユーザーが先に実行しない限り、ファイルを読み取ったりディレクトリを一覧表示したりできないことがわかりました。これが本当にわかりにくい点です。一覧表示された権限は、root ユーザーがファイルを確認するまでまったく効果がないようです。
root@0e4b48a67a72:/# sudo -u www-data ls -la /var/www/app/static/js
ls: cannot access /var/www/app/static/js: Permission denied
root@0e4b48a67a72:/# ls -la /var/www/app/static/js
total 100
drwxr-xr-x 2 root root 4096 Oct 9 02:40 .
drwxr-xr-x 10 root root 4096 Oct 9 02:40 ..
-rw-r--r-- 1 root root 93868 Oct 6 13:39 jquery.js
root@0e4b48a67a72:/# sudo -u www-data ls -la /var/www/app/static/js
total 100
drwxr-xr-x 2 root root 4096 Oct 9 02:40 .
drwxr-xr-x 10 root root 4096 Oct 9 02:40 ..
-rw-r--r-- 1 root root 93868 Oct 6 13:39 jquery.js
ls
なぜこのようなことが起こるのでしょうか? 実行すると有効な権限が明らかに変更されるのはなぜでしょうか?
答え1
Dockerfile で ADD を使用しましたか? ADD は使用しないでください。この命令の後、すべての新しいファイルとディレクトリが UID と GID 0 で作成されるためです。