当设置并运行 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 创建。