Docker自定义桥接网络通过内置DNS服务器127.0.0.11实现容器间服务名自动解析;必须使用docker network create创建的用户定义bridge网络(非默认bridge),容器需加入同一网络并指定--name或network-alias,Compose中服务名默认可解析。
靠 docker 自定义桥接网络就能实现容器间用服务名自动解析通信,核心是它内置了 127.0.0.11 这个嵌入式 dns 服务器,会动态维护同网络内容器名到 ip 的映射。
必须用自定义 bridge 网络
默认的 bridge 网络不带 DNS 服务,容器之间只能靠 IP 通信。要启用服务名解析,得先创建一个用户定义的桥接网络:
docker network create my-net- 这个命令会自动启用内嵌 DNS,并把
nameserver 127.0.0.11写进后续加入该网络的容器的/etc/resolv.conf - 所有在
my-net中的容器,只要名字不重复,就能直接用名字互相访问
启动容器时指定网络和名称
容器必须明确加入同一个自定义网络,且需设置 --name(或 hostname),DNS 才能识别:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
docker run -d --name db --network my-net mysql:8.0docker run -d --name web --network my-net nginx- 此时
web容器里执行ping db或curl http://db:3306就能通 - 名字解析由容器内部 DNS 客户端自动发往
127.0.0.11完成,无需额外配置
支持别名和多服务发现
除了容器名,还能通过 --network-alias 添加额外解析名,方便做负载均衡或灰度发布:
docker run -d --name api-v1 --network my-net --network-alias api --network-alias backend alpine sleep 3600- 其他容器用
api或backend都能解析到这个容器的 IP - 多个容器设同一个别名时,DNS 会轮询返回不同 IP(类似简单服务发现)
Docker Compose 中更省事
用 Compose 编排时,服务名默认就是 DNS 名,不需要手动写 --name:
- 在
docker-compose.yml中定义的服务名(如redis、postgres)会自动注册进网络 DNS - 只要它们在同一个
networks下,比如都连app-network,就能直接redis://redis:6379 - Compose 创建的默认网络本身就是自定义 bridge,天然支持服务名解析

















