别名解决什么问题
--network-alias 给容器在某张用户自定义网络上追加一个可解析的名字,其他容器用这个别名就能访问,不必关心容器名或 IP。它的解析由 Docker 内嵌 DNS 完成,机制与容器名解析相同,作用范围只限该网络。典型价值是把「服务角色」和「容器实例」解耦:副本叫 web-1、web-2,但对外统一用 api 这个别名。
基本信息
| 语法 | --network-alias 名称,可重复指定多个 |
|---|---|
| 作用范围 | 仅所在的用户自定义网络 |
| 解析方式 | 内嵌 DNS 按别名返回对应容器地址 |
| 不支持 | 默认 bridge 网络没有内嵌 DNS |
典型使用场景
- 多副本统一入口:多个容器挂同一别名,调用方配置里只写别名
- 环境切换不变更配置:测试与生产用相同别名,指向不同容器
- 平滑替换:新容器先挂上别名,再下线旧容器,减少调用方改动
- 临时排障:给现有容器加个语义化别名,验证调用链上的名字是否写错
- 单向收紧的调用关系:只给需要被访问的一方加别名,避免全网络可见
别名配置与验证
别名配置与验证
# 启动时挂两个别名
docker run -d --network app-net --network-alias api --network-alias web app/web:1.0
# 运行中的容器追加别名
docker network connect --alias api app-net web
# 在同网络内的临时容器里验证解析
docker run --rm --network app-net alpine getent hosts api
# 查看容器当前持有哪些别名
docker inspect -f '{{json .NetworkSettings.Networks}}' web访问方式对照
| 访问方式 | 自定义网络内 | 默认 bridge 内 |
|---|---|---|
| 容器名 | 可解析 | 不可解析 |
| 网络别名 | 可解析 | 不可解析 |
| 手工写 /etc/hosts | 可解析,需自行维护 | 可解析,需自行维护 |
| 固定 IP | 可用但重建后易变 | 可用但重建后易变 |
别名与容器名冲突或与同网络内已用的别名重复时会报错,命名前先在 inspect 里核对现有记录。
同一别名下有多台容器时,DNS 会返回多条记录,客户端按自己的策略挑选后端,这不等同于负载均衡器的健康检查语义。