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

Docker容器内通过SSM隧道连接PostgreSQL数据库失败排查

问题现象

我在Docker容器内运行AWS SSM端口转发会话,以此连接远程PostgreSQL数据库,容器端口映射到本地5432端口。使用psql客户端连接时出现以下错误:

psql: 错误:连接到"127.0.0.1"端口5432的服务器失败:服务器意外关闭连接
这可能意味着服务器在处理请求之前或处理过程中异常终止。

环境与调试步骤

本地设备为mac m1,运行psql client 14.11。

[本地设备] 确认5432端口无进程监听,排除端口冲突:

netstat -an | grep LISTEN | grep 5432
echo $?
> 1

[容器] Docker容器启动命令如下:

docker run --rm -it -p 5432:5432 \
--entrypoint=/bin/bash \
-v ~/.aws:/home/connect/.aws \
<image_name:version>

所使用的Docker镜像基于Debian,包含Ruby及相关gems,还有psql和mysql客户端。

随后启动AWS SSM会话:

aws ssm start-session --profile <PROFILE> \
--region <REGION> --target <INSTANCE_ID> \
--document-name AWS-StartPortForwardingSessionToRemoteHost \
--parameters host=<HOSTNAME>,portNumber=5432,localPortNumber=5432

[本地设备] 确认容器已监听5432端口:

netstat -an | grep LISTEN | grep 5432
> tcp46      0      0  *.5432                 *.*                    LISTEN

尝试连接数据库:

psql -h 127.0.0.1 -p 5432 -U <USER> -d <DB_NAME> -W
Password:
> psql: 错误:连接到"127.0.0.1"端口5432的服务器失败:服务器意外关闭连接
>     这可能意味着服务器在处理请求之前或处理过程中异常终止。
已尝试的解决方法
  • 更换多个端口(5430、5433等),无效果;
  • 尝试使用localhost、127.0.0.1、0.0.0.0作为连接地址,结果一致;
  • 测试端口映射:将容器8080端口映射到本地,在容器内运行apache2服务,本地浏览器可正常访问,确认端口映射功能正常;
  • 在本地直接运行AWS SSM端口转发会话,可成功通过psql客户端连接数据库,排除AWS IAM权限及安全组问题;
问题根因更新

最初推测是psql Mac客户端或Docker存在问题,后经排查确认,该问题为SSM插件的bug:在容器内运行时行为异常,未在端口上触发监听。


内容的提问来源于stack exchange,提问作者Anas Z.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:33:16