调用 ListBuckets 操作时发生错误 (InvalidArgument):必须向 API 端口发出 S3 API 请求

Ans*_*ngh 5 amazon-s3 docker docker-compose minio

我们正在使用 Minio 进行 S3 的本地测试,并且我们已经docker-compose file使用 Minio 创建了应用程序,并且我们的应用程序依赖项如下:

Docker 撰写文件:

version: "2.1"

services:
  minio:
    image: minio/minio
    container_name: minio
    ports:
      - 9001:9001
    volumes:
      - minio_storage:/data
    environment:
      MINIO_ACCESS_KEY: minio
      MINIO_SECRET_KEY: minio123
      MINIO_REGION: us-east-1
    command: server /data --console-address ":9001"
    mem_limit: 512m

  populate-minio-data:
    container_name: "minio-data"
    image: minio/mc
    volumes:
      - ./hello.txt:/tmp/hello.txt
    entrypoint: >
      /bin/sh -c "
      /usr/bin/mc config host rm local;
      /usr/bin/mc config host add --quiet --api s3v4 local http://minio:9001 minio minio123;
      /usr/bin/mc mb --quiet local/somebucketname1/;
      /usr/bin/mc policy set public local/somebucketname1;
      /usr/bin/mc cp /tmp/hello.txt local/somebucketname1/hello.txt;
      "
    depends_on:
      - minio


  archive-api-app:
    image: openjdk:11
    container_name: "archive-api-app"
    ports:
      - 8091:6001
    volumes:
      - /home/apcuser/dev/projects/ea-archive-service-v2/projects/application/archive-api:/app
    command: [ 'java', '-jar', '/app/build/libs/archive-api-1.0.0.jar' ]
    env_file:
      - ./vars/default.env

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

在java代码中,我将MINIO URL配置为S3端点,如下所示:

 @Bean
    public AmazonS3 getS3Client() {
        return AmazonS3ClientBuilder.standard()
                .withClientConfiguration(new ClientConfiguration().withMaxConnections(maxConnections)
                        .withConnectionTimeout(connectionTimeout).withMaxErrorRetry(maxRetry))
            .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("http://minio:9001", "us-east-1"))
                .build();
    }
Run Code Online (Sandbox Code Playgroud)

有一次,我运行docker-compose file,我可以minio-ui在我的本地 Linux 机器上看到如下:

在此输入图像描述

但我在 Minio 中没有看到任何数据,而是在 minio 中上传数据时看到以下错误:

Attaching to minio-data
minio-data             | Removed `local` successfully.
minio-data             | Added `local` successfully.
minio-data             | mc: <ERROR> Unable to make bucket `local/somebucketname1/`. S3 API Requests must be made to API port.
minio-data             | mc: <ERROR> Unable to set policy `public` for `local/somebucketname1`. S3 API Requests must be made to API port.
minio-data             | `/tmp/hello.txt` -> `local/somebucketname1/hello.txt`
minio-data             | mc: <ERROR> Failed to copy `/tmp/hello.txt`. S3 API Requests must be made to API port.
minio-data             | Total: 0 B, Transferred: 0 B, Speed: 0 B/s
Run Code Online (Sandbox Code Playgroud)

当我尝试从本地 Linux 主机列出 MINIO 数据时,我看到了同样的错误:

export AWS_ACCESS_KEY_ID=minio
export AWS_SECRET_ACCESS_KEY=minio123
export AWS_REGION=us-east-1

aws --endpoint-url http://127.0.0.1:9001 s3 ls

**An error occurred (InvalidArgument) when calling the ListBuckets operation: S3 API Requests must be made to API port.**
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

小智 9

该错误消息表明您在使用 mc 时需要使用 API 端口而不是控制台端口。

/usr/bin/mc config host add --quiet --api s3v4 local http://minio:9001 minio minio123;
Run Code Online (Sandbox Code Playgroud)

您需要使用端口 9000 而不是 9001。