Linux コンテナにおける無効な権限

Linux コンテナにおける無効な権限

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 で作成されるためです。

https://docs.docker.com/reference/builder/#add

関連情報