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

Docker内置DNS主机名无法解析:Bridge网络容器间访问故障求助

验证PostgreSQL容器通过Docker Bridge网络的跨容器访问

清理所有容器

# /!\ 删除所有容器 /!\
docker rm -vf $(docker ps -aq)

启动数据库容器

docker run --name    db                     \
           --env     POSTGRES_PASSWORD=asdf \
           --detach  postgres:alpine

通过IP测试连接

IP=`docker network inspect bridge | grep IPv4 | grep -o -P '\d+\.\d+\.\d+\.\d+'`; \
docker run --env IP=$IP alpine sh -c "apk add --update --no-cache netcat-openbsd && nc -zv $IP 5432"

执行结果:

Connection to 172.17.0.2 5432 port [tcp/*] succeeded!

连接成功!


通过主机名测试连接

docker run alpine sh -c "apk add --update --no-cache netcat-openbsd && nc -zv db 5432"

执行结果:

nc: getaddrinfo for host "db" port 5432: Name does not resolve

连接失败...


问题原因

Docker默认的bridge网络不支持容器名的自动DNS解析,仅自定义桥接网络提供容器间DNS解析能力,允许通过容器名直接访问。

解决方法

创建自定义桥接网络,将数据库容器与测试容器加入同一网络即可实现主机名访问:

  1. 创建自定义网络
docker network create my-bridge-network
  1. 启动数据库容器并指定加入该网络
docker run --name    db                     \
           --env     POSTGRES_PASSWORD=asdf \
           --network my-bridge-network      \
           --detach  postgres:alpine
  1. 使用同一网络的测试容器通过主机名访问
docker run --network my-bridge-network alpine sh -c "apk add --update --no-cache netcat-openbsd && nc -zv db 5432"

执行后会返回连接成功的结果,说明容器名访问正常。

内容的提问来源于stack exchange,提问作者pietrodito

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:34:56