Docker Compose共享命名卷权限被拒绝



下面的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

最新更新