Docker 网络别名
Docker 网络别名(Network Alias)简明指南
概述
Docker 网络别名允许在同一个自定义网络内,为多个容器分配相同的 DNS 名称。客户端通过该名称访问时,Docker 内置 DNS 会返回所有关联容器的 IP 列表,并以轮询方式分配请求,从而实现单机环境下的轻量级服务发现与负载均衡。
核心概念
| 名称类型 | 唯一性 | 作用域 | 主要用途 |
|---|---|---|---|
容器名 (--name) |
全局唯一 | 整个 Docker 引擎 | 管理容器(日志、启停) |
网络别名 (--network-alias) |
同一网络内可重复 | 仅限所属自定义网络 | 服务发现、负载均衡 |
工作原理
- 容器加入自定义网络(如
my-net)时,Docker 为其注册 DNS 记录。 - 每个容器默认拥有自己的容器名作为 DNS 名称;此外可附加任意数量的别名。
- 当其他容器查询该别名时,Docker DNS(
127.0.0.11)返回所有绑定该别名的容器 IP 列表,顺序随机(实际为 round-robin)。 - 客户端通常取第一个 IP 建立连接,后续查询顺序变化,实现请求分散。
使用场景
- 水平扩展无状态服务:多个 API 实例共享别名
api,调用方只需写http://api:8080。 - 灰度发布/滚动更新:新旧版本容器同时绑定同一别名,逐步下线旧版本。
- 本地开发模拟多副本:配合 Docker Compose 的
aliases字段快速搭建。
基本用法
命令行
# 创建自定义网络
docker network create my-net
# 启动三个容器,共享别名 "web"
docker run -d --name web-1 --network my-net --network-alias web nginx
docker run -d --name web-2 --network my-net --network-alias web nginx
docker run -d --name web-3 --network my-net --network-alias web nginx
# 其他容器可通过 "web" 访问
docker run --rm -it --network my-net alpine ping web
Docker Compose
version: '3.8'
services:
web-1:
image: nginx
networks:
my-net:
aliases:
- web
web-2:
image: nginx
networks:
my-net:
aliases:
- web
consumer:
image: alpine
command: ["ping", "web"]
networks:
- my-net
networks:
my-net:
driver: bridge
启动并扩展实例:
docker-compose up -d --scale web-1=3 --scale web-2=2
验证方法
进入任意容器,使用 dig 或 nslookup 查询别名:
docker exec -it any-container sh
# 安装工具(Alpine)
apk add bind-tools
# 查询
dig web @127.0.0.11
返回示例:
web. 600 IN A 172.18.0.2
web. 600 IN A 172.18.0.3
web. 600 IN A 172.18.0.4
重要限制与注意事项
- 仅限自定义网络:默认
bridge网络不支持别名,需先docker network create创建。 - 无健康检查:容器进程挂掉但容器未退出时,DNS 仍会返回其 IP,可能导致请求失败。生产环境建议搭配反向代理(如 Nginx/Traefik)或使用 Swarm/K8s 的健康检查机制。
- 长连接不均衡:客户端可能缓存 DNS 结果,导致后续请求集中到同一实例。适用于短连接场景(HTTP API、gRPC),WebSocket 等长连接需额外处理。
- 别名仅在本网络可见:跨网络访问需通过服务名或端口映射。
与其他方案对比
| 方案 | 优势 | 劣势 | 推荐场景 |
|---|---|---|---|
| 共享别名 (DNS 轮询) | 零配置、Docker 原生 | 无健康检查、长连接不均 | 开发/测试、小型无状态服务 |
| 反向代理 (Nginx/Traefik) | 健康检查、高级路由 | 需额外部署维护 | 生产环境精细控制 |
| Docker Swarm VIP | 内置健康检查、跨主机 | 功能有限、非主流 | 中小集群 |
| Kubernetes Service | 功能完备、生态丰富 | 学习成本高 | 大型生产系统 |
最佳实践
- 开发/测试环境优先使用:快速模拟多副本,简化配置。
- 生产环境谨慎使用:建议叠加健康检查层,或直接采用 Swarm/K8s。
- 配合 Compose 的
--scale:灵活调整副本数,别名自动覆盖新容器。 - 避免依赖容器名:将别名作为稳定的访问入口,容器名仅作管理标识。
docker特殊ip
- 172.17.0.1 — Docker 默认 bridge 网络的网关(宿主机)
- 172.18.0.1 — 自定义网络的第一个可用 IP(通常是网关)
- 172.72.0.1 — 如果你自己创建的子网,比如 172.72.0.0/24,则网关为 172.72.0.1
留待后查,同时方便他人
联系我:ivesbao@163.com
联系我:ivesbao@163.com

浙公网安备 33010602011771号