設定和執行 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 建立。