我正在 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.
localhost
、127.0.0.1
和0.0.0.0
;同样的结果,我怀疑 psql mac 客户端或 docker 存在问题/错误。如果任何人都可以确认他们得到了相同的行为,或者对如何进一步调试/缩小这个问题有想法,那将会有很大的帮助!
psql -h 127.0.0.1 -p 5432 -U -d
你可以尝试使用 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