下面的docker为Django应用程序组成旋转容器:
version: '3.7'
services:
web:
build:
context: .
dockerfile: Dockerfile.prod
container_name: web
volumes:
- static_volume:/static
- media_volume:/media
...
nginx:
container_name: nginx
build: ./nginx_proxy
restart: always
volumes:
- static_volume:/static
- media_volume:/media
...
volumes:
media_volume:
static_volume:
web容器是使用以下Dockerfile构建的:
# pull official base image
FROM python:3.8
...
# organise permissions
RUN chown -R manager:manager /static
RUN chmod -R 755 /static
RUN chown -R manager:manager /media
RUN chmod -R 755 /media
RUN ls -la
...
当权限在构建web容器时打印时,它会返回以下内容:
Step 21/23 : RUN ls -la
---> Running in e61984edfbcb
total 1760
drwxr-xr-x 1 manager:manager 4096 Jan 25 00:00 media
drwxr-xr-x 1 manager:manager 4096 Jan 25 00:00 static
Removing intermediate container e61984edfbcb
如预期,并在Dockerfile中设置。
但是,当容器被旋转起来(docker compose up(,并且我查看web容器的权限时,我发现以下内容:
docker exec -it web bash
manager@c8762586f678:/$ ls -la
total 1760
drwxrwxr-x 3 root:root 4096 Sep 22 11:12 media
drwxr-xr-x 3 manager:manager 4096 Sep 22 11:12 static
为什么这两个命名卷具有不同的权限,特别是为什么媒体卷恢复为root:root?如何确保媒体卷与web容器中的静态文件夹具有相同的权限?
提前感谢
嗨,希望你做得很好
我今晚处理了同样的问题,并通过添加找到了解决方案
sudo chown -R user-you-want:user-you-want data/**
我想我设法使用sudo安装了docker,却忘记了将权限授予我的实际用户
希望有帮助:D