Неэффективные разрешения в контейнерах 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

Вы использовали ADD в этом Dockerfile? Избегайте ADD, поскольку после этой инструкции все новые файлы и каталоги создаются с UID и GID 0.

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

Связанный контент