为什么我无法从 docker 容器访问 minio 控制台?

Sme*_*sii 0 amazon-s3 docker docker-compose minio

我想使用 minio 创建一个 docker 容器,并同时创建一个存储桶。当我尝试转到控制台 (localhost:9001) 时,出现错误。我的怎么了docker-compose

docker-compose.yaml

version: '3'
services:
  minio:
    image: minio/minio:latest
    container_name: minio
    ports:
      - 9000:9000
      - 9001:9001
    volumes:
      - "./data:/data"
      - "./config:/root/.minio"
    environment:
      MINIO_ACCESS_KEY: minio-access-key
      MINIO_SECRET_KEY: minio-secret-key
    command: server /data && server /minio-image/storage --console-address :9001
    networks:
      - minio-network
    restart: always
  create-bucket:
    image: minio/mc:latest
    container_name: create-post-bucket
    environment:
      MINIO_HOST: minio
      MINIO_ACCESS_KEY: minio-access-key
      MINIO_SECRET_KEY: minio-secret-key
    entrypoint: ["sh", "-c"]
    command: "mc mb local/post-bucket || true"
    depends_on:
      - minio
    networks:
      - minio-network
networks:
  minio-network:
Run Code Online (Sandbox Code Playgroud)

lar*_*sks 5

您的docker-compose.yaml.

已弃用的配置

启动minio容器时,第一个输出是:

minio            | WARNING: MINIO_ACCESS_KEY and MINIO_SECRET_KEY are deprecated.
minio            |          Please use MINIO_ROOT_USER and MINIO_ROOT_PASSWORD
Run Code Online (Sandbox Code Playgroud)

所以我们应该解决这个问题。

minio 容器的命令无效

接下来,你的command似乎有问题。你正在运行:

server /data && server /minio-image/storage --console-address :9001
Run Code Online (Sandbox Code Playgroud)

但是整个命令行作为参数传递给minio命令,这没有任何意义。您可能想要:

command: server /data/ --console-address :9001
Run Code Online (Sandbox Code Playgroud)

create-bucket 容器的配置无效

容器create-bucket尝试运行mc mb local/post-bucket,但local别名无效:

[root@e874a3d8e8c8 /]# mc alias list local
local
  URL       : http://localhost:9000
  AccessKey :
  SecretKey :
  API       :
  Path      : auto
Run Code Online (Sandbox Code Playgroud)

minio 服务未在 上运行localhostMINIO_HOSTminio 客户端不使用该环境变量。根据此文档,您可以在环境变量中提供配置MC_HOST_<hostname>

此外,根据容器的配置方式,它可能会在 minio 准备好服务请求之前create-bucket启动并运行,从而导致其失败。

绑定挂载而不是 docker 卷

使用绑定挂载(./data:/data)而不是命名卷通常不是最佳选择,因为它会导致主机和容器之间的 uid/gid 冲突。除非您确实需要在主机和容器之间共享该目录的内容,否则最好使用命名卷在主机和容器之间共享该目录的内容,您最好使用命名卷。


我们可以通过以下方法解决所有这些问题docker-compose.yaml

services:
  minio:
    image: minio/minio:latest
    ports:
      - 9000:9000
      - 9001:9001
    volumes:
      - minio-data:/data
    environment:
      MINIO_ROOT_USER: $MINIO_ROOT_USER
      MINIO_ROOT_PASSWORD: $MINIO_ROOT_PASSWORD
    command: server /data --console-address :9001
    restart: unless-stopped

  create-bucket:
    image: minio/mc:latest
    environment:
      MC_HOST_minio: http://${MINIO_ROOT_USER}:${MINIO_ROOT_PASSWORD}@minio:9000
    entrypoint:
      - sh
      - -c
      - |
        until mc ls minio > /dev/null 2>&1; do
          sleep 0.5
        done

        mc mb minio/post-bucket

volumes:
  minio-data:
Run Code Online (Sandbox Code Playgroud)

这假设您正在文件中设置MINIO_ROOT_USER和,如下所示:MINIO_ROOT_PASSWORD.env

MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=minio-secret-key
Run Code Online (Sandbox Code Playgroud)

entrypoint容器中的脚本循环create-bucket直到minio准备好服务请求;然后它创建存储桶。

使用此配置运行docker-compose up会导致:

Creating network "container_default" with the default driver
Creating volume "container_minio-data" with default driver
Creating container_minio_1  ... done
Creating create-post-bucket ... done
Attaching to container_minio_1, create-post-bucket
minio_1          | Formatting 1st pool, 1 set(s), 1 drives per set.
minio_1          | WARNING: Host local has more than 0 drives of set. A host failure will result in data becoming unavailable.
minio_1          | MinIO Object Storage Server
minio_1          | Copyright: 2015-2023 MinIO, Inc.
minio_1          | License: GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>
minio_1          | Version: RELEASE.2023-06-02T23-17-26Z (go1.19.9 linux/amd64)
minio_1          |
minio_1          | Status:         1 Online, 0 Offline.
minio_1          | S3-API: http://192.168.192.2:9000  http://127.0.0.1:9000
minio_1          | Console: http://192.168.192.2:9001 http://127.0.0.1:9001
minio_1          |
minio_1          | Documentation: https://min.io/docs/minio/linux/index.html
minio_1          | Warning: The standard parity is set to 0. This can lead to data loss.
create-post-bucket | Bucket created successfully `minio/post-bucket`.
create-post-bucket exited with code 0
Run Code Online (Sandbox Code Playgroud)

此时,我可以按预期在 docker 主机上通过 http://localhost:9001 访问 minio 控制台。