Docker-Compose部署PostgreSQL遇DNS解析失败问题求助
解决
dial tcp: lookup db on 127.0.0.11:53: no such host 报错 这个报错本质是Docker内置DNS服务器(127.0.0.11:53)无法解析db这个主机名,下面是针对性的排查和解决步骤:
1. 确认应用与数据库在同一Docker网络
你的PostgreSQL服务配置了my_network,如果应用也是通过Docker部署的,必须把应用服务也加入这个网络,否则跨网络无法通过服务名解析。在docker-compose.yml的应用服务块里添加:
services: # 你的应用服务 app: ... networks: - my_network
如果应用是在本地运行(非Docker容器),不能用db作为主机名,得换成localhost,搭配你映射的宿主机端口54321。
2. 修正数据库连接字符串
根据应用运行环境调整:
- 应用在Docker容器内(和db同网络):
这里用容器内部的端口5432,不是宿主机的54321。connStr := "postgres://dbuser:password@db:5432/postgres?sslmode=disable" - 应用在本地:
connStr := "postgres://dbuser:password@localhost:54321/postgres?sslmode=disable"
3. 验证Docker网络状态
- 检查
my_network是否存在:docker network ls - 确认db容器确实在该网络中:
docker inspect db | grep -A5 Networks
如果应用是Docker容器,同样用上述命令检查它的网络归属。
4. 重启容器修复DNS缓存问题
有时候Docker DNS缓存会出问题,重启相关容器即可:
# 如果应用在docker-compose里 docker-compose restart db app # 仅重启db容器 docker-compose restart db
5. 检查pq驱动连接参数
确保连接字符串里的主机名是db(和docker-compose里的服务名/hostname一致),没有拼写错误;另外加上sslmode=disable可以避免开发环境的SSL连接障碍。
内容的提问来源于stack exchange,提问作者Govind
相关产品推荐
相关产品推荐

