从 Spring Boot 应用程序的 docker 容器内访问 Localstack S3 api

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

我有一个 Spring Boot 应用程序 (SBApp),它在 S3 上上传文件。 在开发阶段,我使用Localstack api来使用S3的功能。

问题

我想从 SBApp 连接到在 docker 容器中运行的 Localstack S3 api。

我有两种运行 SBApp 的场景:

    1. 在本地主机上
    1. 在 docker 容器内。
我使用以下网址连接到 S3 存储桶:

http://s3.localhost.localstack.cloud:4566/

使用此 url,当 SBApp 在本地主机上运行时,我能够连接到 S3。但是当我在 docker 容器中运行相同的应用程序时,系统报告此错误:

Unable to execute HTTP request
无法使用上述 url 从 docker 容器连接到 S3。

以下是我的 localstack 镜像配置:

localstack: container_name: "SBApp-localstack" image: localstack/localstack:3.0.0 hostname: localstack networks: - default ports: - "4566:4566" healthcheck: test: awslocal dynamodb list-tables interval: 30s timeout: 2s retries: 5 environment: - SERVICES=s3 - DEBUG=1 - DATA_DIR=/tmp/localstack/data - AWS_REGION=ap-south-1 - AWS_ACCESS_KEY_ID=ABC - AWS_SECRET_ACCESS_KEY=ABC - NODE_ENV=test command: bash -c "pip install awscli awscli-local requests --upgrade" volumes: - ./data:/var/lib/localstack - "/var/run/docker.sock:/var/run/docker.sock" - ./bin:/docker-entrypoint-initaws.d
当 SBApp 在本地主机和 docker 容器中运行时,我在这两种情况下尝试了以下其他 url - 


    1. http://localhost:4566/
      (在这种情况下,系统会为存储桶名称添加前缀,例如 -bucket_name.localhost)
    1. http://localstack:4566/
      (在这种情况下,系统会为存储桶名称添加前缀,例如 -bucket_name.localstack)
    1. http://SBApp-bucket.s3.localhost.localstack.cloud:4566/
      
      
但没有一个能正常工作。如果有人能在我做错事时纠正我或给我正确的解决方案,那将非常感激。

spring-boot docker amazon-s3 localstack aws-s3-client
1个回答
0
投票
如前所述,您需要使用路径样式配置,或者在端点名称中使用 s3 前缀。

https://docs.localstack.cloud/user-guide/aws/s3/#path-style-and-virtual-hosted-style-requests

© www.soinside.com 2019 - 2024. All rights reserved.