При настройке и запуске экземпляра 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.