You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法从测试容器访问LocalStack S3服务,请求排查原因

问题

使用Docker Compose部署LocalStack与测试容器后,无法从测试容器访问LocalStack的S3服务。执行docker-compose up -d后两个容器均启动成功,但在测试容器内运行aws --endpoint-url=http://localhost:4566 s3 ls时,报错Could not connect to the endpoint URL: "http://localhost:4566/"。

LocalStack容器日志显示服务已就绪,且能在LocalStack容器内部通过AWS CLI成功创建S3 Bucket(日志最后一行AWS s3.CreateBucket => 200),但测试容器无法连接到LocalStack的4566端口。

以下是docker-compose.yaml文件:

localstack:
  image: xxx.ecr.us-east-1.amazonaws.com/hub/localstack/localstack:latest
  container_name: localstack
  ports:
    - "4566:4566"
  environment:
    - SERVICES=s3
    - DEBUG=1
    - DATA_DIR=
    - AWS_REGION=us-east-1
    - AWS_DEFAULT_REGION=us-east-1
    - AWS_ACCESS_KEY_ID=fake
    - AWS_SECRET_ACCESS_KEY=fake
    - HOSTNAME=localstack
    - HOSTNAME_EXTERNAL=localstack
  volumes:
    - "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack"
    - "/var/run/docker.sock:/var/run/docker.sock"

test:
  image: xxx.ecr.us-east-1.amazonaws.com/build-images/build-image:0.12.0
  container_name: test
  environment:
    - AWS_REGION=us-east-1
    - AWS_ACCESS_KEY_ID=myAccessKeyId
    - AWS_SECRET_ACCESS_KEY=mySecretAccessKey
    - JAVA_OPTS=-Dwebdriver.chrome.whitelistedIps=
    - ARTIFACTORY_SVC_ACCT_PWD=${ARTIFACTORY_SVC_ACCT_PWD}
    - ARTIFACTORY_SVC_ACCT=${ARTIFACTORY_SVC_ACCT}
  ports:
    - "46050:46050"
  volumes:
    - .:/tmp
  depends_on:
    - db
  entrypoint:
    - tail
    - -f
    - /dev/null
排查与解决方案

核心原因

测试容器内的localhost指向容器自身的网络栈,而非宿主机或LocalStack容器。Docker Compose默认会为所有服务创建共享网络,容器之间可通过服务名(即docker-compose.yaml中定义的服务名称)互相访问。

具体修复步骤

  1. 修正AWS CLI端点地址
    在测试容器内执行命令时,将localhost替换为LocalStack的服务名localstack:

    aws --endpoint-url=http://localstack:4566 s3 ls
    
  2. 优化Docker Compose配置(可选)

    • 修正依赖关系:当前test服务依赖db,但实际需要等待LocalStack启动,可修改depends_on配置:
      depends_on:
        - localstack
      
      注意:depends_on仅保证启动顺序,不保证服务完全就绪,若需要等待LocalStack服务可用,可添加健康检查或启动脚本。
  3. 验证网络连通性
    先在测试容器内ping LocalStack服务名,确认网络可达:

    ping localstack
    

    若能ping通,再执行AWS CLI命令即可正常访问S3服务。

内容的提问来源于stack exchange,提问作者Laodao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 08:13:37