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

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同网络):
    connStr := "postgres://dbuser:password@db:5432/postgres?sslmode=disable"
    
    这里用容器内部的端口5432,不是宿主机的54321。
  • 应用在本地:
    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:55:19