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

Localstack SNS通过HTTP协议无法连接API端点求助

问题原因及解决方案

核心问题

LocalStack容器内部使用localhost:6010无法访问你的my-api服务,原因有两点:

  • Docker容器的localhost指向容器自身,而非宿主机或其他容器。LocalStack容器里的localhost:6010实际是在访问自己容器的6010端口,而非宿主机映射的my-api服务。
  • 你在订阅命令里用了宿主机的映射端口6010,但在Docker网络内部,应该直接用my-api容器的内部端口80。

修复步骤

1. 修改订阅脚本的端点地址

把初始化脚本里的订阅命令中的端点URL替换为Docker服务名+内部端口:

awslocal sns subscribe --topic-arn "arn:aws:sns:eu-west-1:000000000000:test-topic" --region=eu-west-1 --protocol http --endpoint-url=http://my-api:80/webhook

在同一个Docker网络(backend)中,服务名my-api会被自动解析为对应容器的IP,直接访问内部端口80即可,无需用宿主机的映射端口。

2. 确保服务启动顺序(可选但推荐)

如果LocalStack的初始化脚本在my-api完全启动前运行,可能会因为API服务未就绪导致连接失败。可以在Docker Compose中为LocalStack添加依赖,并使用启动等待脚本:

  • 在localstack服务的配置中添加depends_on:
    services:
      localstack:
        # ... 其他原有配置
        depends_on:
          - my-api
    
  • 编写一个简单的等待脚本(比如wait-for-api.sh)放在localstack-scripts目录,内容如下:
    #!/bin/bash
    until curl -s http://my-api:80/health; do
      echo "Waiting for my-api to be ready..."
      sleep 2
    done
    
  • 在初始化脚本开头添加执行该等待脚本的命令,确保API就绪后再创建订阅:
    ./wait-for-api.sh
    awslocal sns create-topic --name test-topic --region=eu-west-1
    awslocal sns subscribe --topic-arn "arn:aws:sns:eu-west-1:000000000000:test-topic" --region=eu-west-1 --protocol http --endpoint-url=http://my-api:80/webhook
    
    记得给脚本添加可执行权限:chmod +x localstack-scripts/wait-for-api.sh

验证方法

运行docker-compose up后,进入LocalStack容器:

docker exec -it localstack bash

然后测试能否访问my-api:

curl http://my-api:80/webhook

如果能正常响应,说明网络连通性没问题,此时SNS订阅应该可以成功创建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:01:23