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

Docker部署PostgreSQL后宿主机外部连接失败求助

问题排查与解决

1. 解析dial tcp: lookup db on x.x.x.x:53: no such host错误

db是Docker Compose为容器分配的内部网络别名,仅在Docker创建的专属网络内(同Compose文件的其他容器)才能被解析。宿主机不在这个网络中,所以无法通过db访问容器。

解决方式:

  • 宿主机连接时,必须使用localhost/宿主机IP作为Host,同时使用映射到宿主机的端口5433(而非容器内部的5432)。

2. 解决localhost/127.0.0.1连接时的认证错误

认证错误通常和PostgreSQL的访问控制规则或用户权限有关,按以下步骤排查:

步骤1:确认连接参数正确性

检查你的main.go数据库配置:

  • Host:localhost或127.0.0.1
  • Port:5433(必须是docker-compose映射的宿主机端口)
  • Username:tickets
  • Password:和docker-compose中设置的POSTGRES_PASSWORD一致
  • Database:对应创建的数据库名(默认和用户名相同,除非自定义)

步骤2:检查PostgreSQL访问控制规则(pg_hba.conf)

进入PostgreSQL容器:

docker exec -it <你的容器名或ID> sh

查看pg_hba.conf配置:

cat /var/lib/postgresql/data/pg_hba.conf

确认是否存在允许宿主机连接的规则,比如:

host    all             all             0.0.0.0/0               scram-sha-256

如果没有,添加该规则(或限制为宿主机网段,比如192.168.1.0/24),然后重启容器:

docker restart <你的容器名或ID>

步骤3:确认tickets用户的登录权限

进入容器的psql:

docker exec -it <你的容器名或ID> psql -U tickets

执行查询查看用户权限:

SELECT usename, host FROM pg_user;

如果tickets的host字段是localhost,说明该用户仅允许从容器内部登录,需要修改为允许任意地址:

ALTER USER tickets WITH LOGIN PASSWORD '你的密码' HOST '%';

修改后退出psql,重启容器生效。

步骤4:验证连接

在宿主机直接用psql测试连接(需先安装postgresql-client):

psql -h localhost -p 5433 -U tickets -d <你的数据库名>

如果能成功登录,说明配置正常,再调整main.go的参数即可。

内容的提问来源于stack exchange,提问作者sato-kaso

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 02:36:09