是否可以将 docker minio/minio:latest 的默认用户从 root 更改为任何其他用户名/组?

问题描述 投票:0回答:1

我在 docker-compose.yaml 文件中使用 minio/minio:latest 镜像,并且我希望 minio docker 容器拥有 root 以外的用户。

检查镜像附带的 /usr/bin/docker-entrypoint.sh 后(见下文),我发现可以使用环境变量设置用户名和组:

MINIO_USERNAME
MINIO_GROUPNAME

但是我收到以下错误:

minio  | Time: 14:09:00 UTC 03/19/2024
minio  | Error: unable to create (/data/.minio.sys/tmp) file access denied, drive may be faulty please investigate (*fmt.wrapError)
minio  |        6: internal/logger/logger.go:260:logger.LogIf()
minio  |        5: cmd/prepare-storage.go:96:cmd.bgFormatErasureCleanupTmp()
minio  |        4: cmd/xl-storage.go:291:cmd.newXLStorage()
minio  |        3: cmd/object-api-common.go:63:cmd.newStorageAPI()
minio  |        2: cmd/format-erasure.go:706:cmd.initStorageDisksWithErrors.func1()
minio  |        1: github.com/minio/pkg/[email protected]/sync/errgroup/errgroup.go:123:errgroup.(*Group).Go.func1()
minio  | ERROR Unable to use the drive /data: file access denied: Invalid arguments specified

这是我的 docker-compose.yaml 文件:

---
services:
    minio:
        image: minio/minio:latest
        container_name: minio
        volumes:
            - minio:/data
        environment:
            MINIO_USERNAME: ouss
            MINIO_GROUPNAME: ouss
        command: server /data
        restart: always
volumes:
  - minio

docker-entrypoint.sh
,随 minio 图像一起提供

#!/bin/sh
#

# If command starts with an option, prepend minio.
if [ "${1}" != "minio" ]; then
    if [ -n "${1}" ]; then
        set -- minio "$@"
    fi
fi

docker_switch_user() {
    if [ -n "${MINIO_USERNAME}" ] && [ -n "${MINIO_GROUPNAME}" ]; then
        if [ -n "${MINIO_UID}" ] && [ -n "${MINIO_GID}" ]; then
            chroot --userspec=${MINIO_UID}:${MINIO_GID} / "$@"
        else
            echo "${MINIO_USERNAME}:x:1000:1000:${MINIO_USERNAME}:/:/sbin/nologin" >>/etc/passwd
            echo "${MINIO_GROUPNAME}:x:1000" >>/etc/group
            chroot --userspec=${MINIO_USERNAME}:${MINIO_GROUPNAME} / "$@"
        fi
    else
        exec "$@"
    fi
}

## DEPRECATED and unsupported - switch to user if applicable.
docker_switch_user "$@"
docker docker-compose minio chroot
1个回答
0
投票

调整权限或用户范围似乎有风险,一般不建议这样做。我建议修改 Docker Volume 而不是触及用户/权限。

  • 定义 docker 卷

从您的

docker-compose.yaml
文件中删除
volumes: minio
,然后在下面重新定义一个新卷。

volumes:
  minio-data:  # New named volume
services:
  minio:
    image: minio/minio:latest
    volumes:
      - minio-data:/data  # Mount the named volume
    environment:
      MINIO_USERNAME: ouss
      MINIO_GROUPNAME: ouss
    command: server /data
    restart: always

这将创建一个由 Docker 管理的新卷,自动设置与指定用户一起使用的容器内的所有权权限。

修改用户和组(不推荐)

如果是开发或测试环境或您自己的个人项目,可以忽略安全角度,尽管我不会这样做,那么您可以使用

/data:uid=<user>,gid=<group>

挂载您的卷
© www.soinside.com 2019 - 2024. All rights reserved.