Назад | Перейти на главную страницу

Неэффективные разрешения в контейнерах 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 вызвать очевидное изменение действующих разрешений?

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

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