Minio 权限被拒绝

Ant*_*ony 2 permissions docker minio

当我启动 docker 容器时,我遇到了 minio 问题,这是我的错误:

19:32:16.16 INFO ==> ** 启动 MinIO 设置 **

/opt/bitnami/scripts/libminio.sh:第 324 行:/data/.root_user:权限被拒绝

在 windows 上可以,但在 linux 上不行

这是我的 docker-compose 设置:

        container_name: minio
        image: "bitnami/minio:latest"
        ports:
            - "9000:9000"
            - "9001:9001"
        environment:
            - MINIO_ACCESS_KEY=${ACCESS_KEY}
            - MINIO_SECRET_KEY=${SECRET_KEY}
            - MINIO_DEFAULT_BUCKETS=${BUCKET}
        volumes:
            - ./docker-volumes/s3-data:/data
        networks:
            - proxy
Run Code Online (Sandbox Code Playgroud)

lar*_*sks 7

问题

您正在将目录绑定安装./docker-volumes/s3-data到容器中。最初这个目录不存在,所以 Docker 以 root 身份创建它。这意味着/data容器内的目录归 root 所有。

不幸的是,容器内部minio以用户身份运行1001,因此它没有足够的权限在内部创建文件(或目录)/data

解决方案 1:Docker 卷

如果您使用命名的 docker 卷而不是绑定安装主机目录,如下所示:

version: "3"

services:
  minio:
    container_name: minio
    image: "bitnami/minio:latest"
    ports:
        - "9000:9000"
        - "9001:9001"
    environment:
        - MINIO_ACCESS_KEY=${ACCESS_KEY}
        - MINIO_SECRET_KEY=${SECRET_KEY}
        - MINIO_DEFAULT_BUCKETS=${BUCKET}
    volumes:
        - minio_data:/data

volumes:
  minio_data:
Run Code Online (Sandbox Code Playgroud)

然后 Docker 会将卷的所有者和权限设置为您要挂载该卷的目录的权限。在bitnami/minio图像中,/data看起来像:

[lars@docker work]$ docker run -it --rm  bitnami/minio:latest ls -ld /data
[...]
drwxrwxr-x. 2 root root 6 May 22 00:55 /data
Run Code Online (Sandbox Code Playgroud)

也就是说,它可由 userroot和 group写入root。minio 容器以 UID 1001 和 group 运行root,因此它能够写入该目录。

解决方案 2:使用权限进行模糊处理

当然,您可以显式地预先创建docker-volumes/s3-data 目录,然后将其 chown 到适当的用户 ID:

sudo chown 1001 docker-volumes/s3-data
Run Code Online (Sandbox Code Playgroud)

但一般来说,除非有原因需要使用特定的主机目录,否则使用解决方案 1 中的命名 Docker 卷将更易于管理(因为您不需要提前知道容器用户 ID,并且因为您最终不会在主目录中看到非您用户 ID 拥有的文件)。