通过 docker 端口上的隧道连接到 psql 数据库时出错

问题描述 投票:0回答:1

问题

我正在 docker 容器内运行 aws ssm 端口转发会话,该容器建立与远程 postgresql 数据库的连接。容器端口映射到我的本地主机的端口 5432。当我尝试连接 psql 客户端时,出现以下错误:

psql:错误:与“127.0.0.1”处的服务器的连接,端口 5432 失败:服务器意外关闭了连接 这可能意味着服务器异常终止 在处理请求之前或期间。

问题设置与调试:

我的本地机器是

mac m1
。跑步
psql client 14.11
.

[本地机器]确保没有进程正在运行(以消除端口冲突的可能性):

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>

### The docker image i'm running is a debian-based 
### ruby image which has some added gems and psql and mysql clients 

# I then start an aws ssm session
aws ssm start-session --profile <PROFILE> \
--region <REGION> --target <INSTANCE_ID> \
--document-name AWS-StartPortForwardingSessionToRemoteHost \
--parameters host=<HOSTNAME>,portNumber=5432,localPortNumber=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: error: connection to server at "127.0.0.1", port 5432 failed: server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.

我尝试过的其他事情:

  • 尝试过各种端口(5430、5433、353432、...);没有效果,
  • 还尝试了
    localhost
    127.0.0.1
    0.0.0.0
    ;同样的结果,
  • 作为测试,我已映射端口 8080 并在容器内运行 apache2 服务器,并且能够访问本地浏览器上的主页,因此端口映射按预期工作,
  • 我尝试直接在本地运行 aws ssm 端口转发会话;我成功地通过 psql 客户端进行连接。这消除了与 AWS IAM 权限或安全组相关的任何问题,

结论

我怀疑 psql mac 客户端或 docker 存在问题/错误。如果任何人都可以确认他们得到了相同的行为,或者对如何进一步调试/缩小这个问题有想法,那将会有很大的帮助!

docker macos psql portforwarding aws-ssm
1个回答
0
投票

psql -h 127.0.0.1 -p 5432 -U -d -W

你可以尝试使用 sudo 运行它吗

sudo psql -h 127.0.0.1 -p 5432 -U <USER> -d <DB_NAME> -W

此问题是因为您尝试使用 psql 的用户尚未添加到 psql 用户组,当您安装 psql 和客户端时默认会创建一个用户和组,请使用 sudo 尝试一次

参考链接: https://www.redhat.com/sysadmin/postgresql-setup-use-cases

© www.soinside.com 2019 - 2024. All rights reserved.