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

相关内容