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

如何测试两个AWS SAM本地容器之间的网络连通性?

本地SAM容器连通性测试方法
  • 执行docker ps命令,记录运行lambdaA、lambdaB的两个容器的ID
  • 进入lambdaA容器的交互终端:docker exec -it <lambdaA容器ID> /bin/bash
  • 容器内安装基础网络排查工具:apt update && apt install -y curl telnet iputils-ping
  • 先测试网关连通性:ping 172.17.0.1,如果丢包说明Docker桥接网络配置异常
  • 再测试lambdaB服务端口连通性:telnet 172.17.0.1 3001,如果无法连接说明端口被拦截或lambdaB服务未正常监听
  • 最后直接在lambdaA容器内发起lambdaB调用测试:
curl -XPOST "http://172.17.0.1:3001/2015-03-31/functions/LambdaB/invocations" -d '{}'

如果能正常返回{"statusCode":200,"body":"hello world from lambdaB"}则说明链路正常,问题出在lambdaA的代码配置上。

可能的问题原因
  1. 系统防火墙拦截docker0网卡流量
    Ubuntu 18.04默认启用ufw防火墙,默认规则会拒绝从Docker容器发起的到宿主机docker0网卡的流量,导致连接超时。
  2. lambdaB监听配置错误
    如果sam local start-lambda没有正确绑定到172.17.0.1网卡,仅绑定到127.0.0.1的话,Docker容器内无法通过172.17.0.1访问到lambdaB服务。
  3. 函数名配置不匹配
    lambdaA代码中调用的FunctionName: "LambdaB"需要和lambdaB.yaml中定义的函数逻辑ID完全一致,否则会返回404错误,也可能表现为超时。
  4. 端口冲突
    如果宿主机上3001端口被其他服务占用,lambdaB的start-lambda服务会启动失败,你可以通过netstat -tunlp | grep 3001检查端口占用情况。
修复方案
  1. 放行docker0网卡的防火墙规则:
sudo ufw allow in on docker0
sudo ufw reload

测试阶段也可以临时关闭防火墙验证:sudo ufw disable
2. 确认lambdaB服务正常:在宿主机执行以下命令,验证返回结果符合预期

curl -XPOST "http://172.17.0.1:3001/2015-03-31/functions/LambdaB/invocations" -d '{}'
  1. 调整lambdaA的调用代码,增加必要参数便于排查:
lambda.invoke({
    FunctionName: "LambdaB",
    InvocationType: 'RequestResponse',
    Payload: JSON.stringify({})
})
  1. 如果仍有问题,可以在启动lambdaB时显式指定端口避免冲突,比如:
sam local start-lambda -t ../lambdaB.yaml --warm-containers eager --host 172.17.0.1 -p 3002 --container-host-interface 0.0.0.0 2>&1 | sed -e 's/^/[LAMBDA_B] /'

同步修改lambdaA代码中的endpoint为http://172.17.0.1:3002即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:39:05