如何使用MinIO在docker-compose中模拟AWS S3?

3
我有一个应用服务器,必须从AWS S3获取数据,例如:https://my-bucket.s3.us-east-1.amazonaws.com/assets/images/557a84a8-bd4b-7a8e-81c9-d445228187c0.png 我想使用docker-compose测试这个应用服务器。
我可以很容易地启动MinIO服务器,但是如何配置才能使我的应用程序访问本地MinIO服务器,就像它是AWS服务器一样?
我正在使用标准的.NET AWS SDK,并且不想更改我的应用程序代码进行测试(这将使测试失去意义)。
我目前所拥有的:
version: '3.9'
services:
  s3:
    image: quay.io/minio/minio:RELEASE.2022-08-13T21-54-44Z
    command: minio server /data
    ports:
      - "9000:9000"
    environment:
      MINIO_ROOT_USER: minio
      MINIO_ROOT_PASSWORD: minio123
      MINIO_ACCESS_KEY: minio_access_key
      MINIO_SECRET_KEY: minio_secret_key
    restart: always 

  server:
    image: server:latest
    ports:
      - "8080:8080"
    environment:
      AWS_ACCESS_KEY_ID: minio_access_key
      AWS_SECRET_ACCESS_KEY: minio_secret_key
    depends_on:
      s3:
        condition: service_started

1个回答

1
  • 您可以在s3容器上设置网络别名,使其作为my-bucket.s3.us-east-1.amazonaws.com可用。

  • 您可以通过设置MINIO_DOMAIN环境变量(参见服务器配置指南),告诉minio服务器识别以s3.us-east-1.amazonaws.com为根的基于名称的存储桶。

  • 您可以通过设置--address命令行选项(或在其前面放置代理)来更改minio侦听的端口。

这样就可以实现:

services:
  s3:
    image: quay.io/minio/minio:RELEASE.2022-08-13T21-54-44Z
    command: minio server /data
    ports:
      - "9000:9000"
    environment:
      MINIO_ROOT_USER: minio
      MINIO_ROOT_PASSWORD: minio123
      MINIO_ACCESS_KEY: minio_access_key
      MINIO_SECRET_KEY: minio_secret_key
      MINIO_DOMAIN: s3.us-east-1.amazonaws.com
    restart: always
    networks:
      default:
        aliases:
          - my-bucket.s3.us-east-1.amazonaws.com

这将“几乎”可以工作:您的存储桶将在http://my-bucket.s3.us-east-1.amazonaws.com:9000上可用。如果您想要将其在https://my-bucket.s3.us-east-1.amazonaws.com上提供,您需要在其前面设置一个SSL终止代理(例如Traefik、Nginx等),并创建和安装必要的证书,以便客户端信任服务器。
希望这足以指引您正确的方向!

这很好,只是遗憾的是它默认不支持端口443,因为绝大多数S3兼容工具都期望在端口443上使用它。你基本上还需要做https://min.io/docs/minio/linux/integrations/setup-nginx-proxy-with-minio.html。 - rjh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接