我有一个 Spring Boot 应用程序 (SBApp),它在 S3 上上传文件。 在开发阶段,我使用Localstack api来使用S3的功能。
问题
我有两种运行 SBApp 的场景:我想从 SBApp 连接到在 docker 容器中运行的 Localstack S3 api。
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 -
http://localhost:4566/
(在这种情况下,系统会为存储桶名称添加前缀,例如 -bucket_name.localhost)
http://localstack:4566/
(在这种情况下,系统会为存储桶名称添加前缀,例如 -bucket_name.localstack)
http://SBApp-bucket.s3.localhost.localstack.cloud:4566/