









Docker 网络别名允许在同一个自定义网络内,为多个容器分配相同的 DNS 名称。客户端通过该名称访问时,Docker 内置 DNS 会返回所有关联容器的 IP 列表,并以轮询方式分配请求,从而实现单机环境下的轻量级服务发现与负载均衡。
| 名称类型 | 唯一性 | 作用域 | 主要用途 |
|---|---|---|---|
容器名 (--name) |
全局唯一 | 整个 Docker 引擎 | 管理容器(日志、启停) |
网络别名 (--network-alias) |
同一网络内可重复 | 仅限所属自定义网络 | 服务发现、负载均衡 |
my-net)时,Docker 为其注册 DNS 记录。127.0.0.11)返回所有绑定该别名的容器 IP 列表,顺序随机(实际为 round-robin)。api,调用方只需写 http://api:8080。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
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 轮询) | 零配置、Docker 原生 | 无健康检查、长连接不均 | 开发/测试、小型无状态服务 |
| 反向代理 (Nginx/Traefik) | 健康检查、高级路由 | 需额外部署维护 | 生产环境精细控制 |
| Docker Swarm VIP | 内置健康检查、跨主机 | 功能有限、非主流 | 中小集群 |
| Kubernetes Service | 功能完备、生态丰富 | 学习成本高 | 大型生产系统 |
--scale:灵活调整副本数,别名自动覆盖新容器。此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。