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

本地SAM API的Lambda无法连接Postgres的Docker网络问题排查

SAM本地Lambda无法连接Postgres数据库的问题排查与解决

核心原因

Docker容器内的localhost指向容器自身,而非宿主机。你的Postgres运行在独立容器中,且与SAM启动的Lambda容器同属自定义Docker网络,但Lambda代码中用localhost作为数据库host,导致容器内部无法找到Postgres服务。

解决步骤

  1. 修改数据库连接字符串的host值
    由于Postgres容器启动时指定了名称postgres_db_new,且与Lambda容器在同一my-sam-network网络内,容器间可通过名称直接通信。将连接字符串的host改为容器名称:

    connStr := "host=postgres_db_new port=5432 user=local_db password=local_db dbname=vigitrack sslmode=disable"
    
  2. 使用网络名称而非ID启动SAM
    启动SAM时建议使用自定义网络的名称my-sam-network,而非自动生成的网络ID,避免ID变动导致的问题:

    sam local start-api --docker-network my-sam-network
    
  3. 可选:验证容器间连通性
    若问题仍存在,可进入Lambda容器测试与Postgres容器的连通性:

    # 列出运行中的容器,找到SAM Lambda容器ID
    docker ps
    # 进入Lambda容器
    docker exec -it <lambda-container-id> /bin/sh
    # 测试ping Postgres容器
    ping postgres_db_new
    

补充说明

本地环境能正常连接是因为宿主机的localhost指向自身,Postgres容器通过-p 5432:5432将端口映射到了宿主机,所以宿主机可以直接访问。但Lambda运行在独立容器中,localhost仅代表该容器内部,无法直接映射到宿主机的端口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 01:47:18