如何在 Dockerfile 中將文件夾的權限更改為 777?
我有一個這樣的項目目錄:
|-var/www |-docker-compose.yml |-app |--uploads |---photos |-Dockerfile
這是我的
docker-compose.yml
文件:myapp: build: context: myfolder dockerfile: Dockerfile container_name: flask image: api/v1:01 restart: unless-stopped environment: APP_ENV: "prod" APP_DEBUG: "False" APP_PORT: 5000 volumes: - appdata:/var/www
我想要什麼: 我想
app/uploads/photos
將此文件夾的權限更改為777
。這是一個上傳文件夾,因此使用者可以上傳到此文件夾。我
Dockerfile
現在是這樣的:FROM python:3.6.8-alpine3.9 ENV GROUP_ID=1000 \ USER_ID=1000 WORKDIR /var/www/ ADD . /var/www/ RUN apk add --no-cache build-base libffi-dev openssl-dev ncurses-dev RUN pip install --upgrade pip RUN pip install -r requirements.txt RUN addgroup -g $GROUP_ID www RUN adduser -D -u $USER_ID -G www www -s /bin/sh USER www EXPOSE 5000
在查看這個問題之後,為了實現我想要的,我嘗試了以下內容:
FROM python:3.6.8-alpine3.9 ENV GROUP_ID=1000 \ USER_ID=1000 WORKDIR /var/www/ ADD . /var/www/ RUN apk add --no-cache build-base libffi-dev openssl-dev ncurses-dev RUN pip install --upgrade pip RUN pip install -r requirements.txt RUN addgroup -g $GROUP_ID www RUN adduser -D -u $USER_ID -G www www -s /bin/sh RUN chown -R www:www /var/www RUN chmod -R 777 /var/www/uploads RUN chmod -R 777 /var/www/uploads/photos USER www EXPOSE 5000
但似乎
chmod
我的 dockerfile 中的命令沒有生效。因為每當我將一些文件上傳到app/uploads/photos
我的程式碼中時,我的nginx
伺服器都會不斷收到此錯誤:PermissionError: [Errno 13] Permission denied: '/var/www/uploads/photos/myfilename.png'
有人請幫忙。請提供如何更改文件夾權限的解決方案
Dockerfile
。更新:
我嘗試通過以下操作更改
/var/www/uploads
建構容器後的權限並且容器正在執行:docker exec -it myapp /bin/sh
然後執行
chmod -R 777 /var/www/uploads
我得到的是
chmod: /var/www/uploads: Operation not permitted
因此,我懷疑在建構 docker 時也會發生此錯誤,然後根據serverfault 的這個答案,我嘗試將 dockerfile 修改為:
FROM python:3.6.8-alpine3.9 ENV GROUP_ID=1000 \ USER_ID=1000 WORKDIR /var/www/ ADD . /var/www/ USER root RUN chmod -R 777 /var/www/uploads RUN addgroup -g $GROUP_ID www RUN adduser -D -u $USER_ID -G www www -s /bin/sh USER www RUN apk add --no-cache build-base libffi-dev openssl-dev ncurses-dev RUN pip install --upgrade pip RUN pip install -r requirements.txt EXPOSE 5000
但它仍然不起作用。但似乎我上面的方法也是錯誤的。因為我已經在
root
中執行了dockerfile
。但是同時,當我docker exec
使用Operation not permitted
.我是 Docker 的新手。只是不知道如何完成這項工作。
我希望知道的:
1)如何將文件夾更改
var/www/uploads
為權限777?
- 是什麼問題導致我無法更改我的方法的權限?
3)實現這一目標的更好方法是什麼?(如果有)
您真的不應該設置
777
,最好將該目錄的所有權更改為www
帳戶。無論如何,您在 Dockerfile 中的更改真的無關緊要,因為您有一個卷 (
appdata:/var/www
),這意味著您在映像中擁有的權限被您的捲所掩蓋。您
docker exec -it myapp /bin/sh
將失敗,因為該映像正在執行,www
無法在不屬於www
.無論如何嘗試只是暫時將捲映射到另一個圖像。執行一些操作,例如
docker run --rm -it -v appdata:/var/www debian:buster-slim
啟動與映射卷的 Debian 映像的互動式會話。該映像預設以 root 身份執行,因此您應該能夠更改/修復卷中的權限。您也可以--user
在執行 docker exec 時傳遞該選項。