首页/云/云与容器速查/网络别名 --network-alias
容器与 Docker106 条

网络别名 --network-alias

给容器在网络内追加可解析名字:滚动升级时用稳定别名指向新实例,或让多个容器共用同一别名,靠 DNS 多值实现粗粒度轮询。

云与容器速查云更新于 2026-10-13

网络别名是什么

网络别名给容器在自己所属的网络里再登记一个可解析的名字:容器名是唯一标识,别名可以多个容器共用,也可以随时挂接与摘除。它最实用的场景是滚动替换——新容器带上与旧容器相同的别名上线,调用方不用改配置就能切到新实例;多个容器共用同一别名时,解析会返回多个地址,起到粗粒度的分流效果。注意别名只在所属网络内有效,默认桥接网络不支持这项能力。

基本信息

写法docker run --network-alias 别名,可重复传参或逗号分隔多个
作用域仅在容器所属的自定义网络内可解析,跨网络不可见
多容器同别名解析返回多个地址,由客户端自行选择,属于粗粒度轮询
补挂别名docker network connect --alias 别名 网络 容器,运行中也能执行
默认桥接限制默认桥接网络不提供别名解析,必须自建网络
查看docker inspect 的 Networks 段可看到该容器在各网络里的别名

典型使用场景

  • 滚动升级:新实例带上旧别名上线,调用方零改动切换
  • 多个只读副本共用同一别名,实现简单的读流量分摊
  • 把服务名与容器名解耦,换容器时不必改调用方配置
  • 给运行中的容器临时补挂别名,接入另一个网络做联调
  • 多租户环境里用别名表达业务语义,隔离底层命名细节

使用示例

使用示例
docker run -d --name db-v2 --network mynet --network-alias db mysql:8.0   # 新实例顶替旧别名
docker exec web getent hosts db   # 在客户端容器里验证解析结果
docker network connect --alias cache mynet redis-c   # 给已运行容器补挂别名
docker run --rm --network mynet alpine nslookup db   # 手工验证解析是否生效
docker inspect --format '{{json .NetworkSettings.Networks}}' db-v2   # 查看别名记录
docker run --rm --network mynet --network-alias db alpine nslookup db   # 多容器同别名的效果

行为要点

项说明注意
作用域仅所属网络内可解析跨网络调用解析不到
多容器同别名解析返回多个地址客户端轮询粒度粗,不是负载均衡
默认桥接网络不支持别名需要先创建自定义网络
长连接客户端可能长期只连一个实例分流效果取决于连接复用策略
轮询效果取决于客户端的解析缓存与连接复用方式:长连接客户端可能长时间只打一个实例,不要把它当负载均衡器使用。
切换实例时建议保留旧容器一段时间再下线:客户端解析缓存尚未过期,立刻删除旧实例会造成短暂访问失败。

易错点

  • 别名只加在新容器上:旧容器仍在注册同名,切换期间解析到两个不同实例
  • 在默认桥接网络使用别名:完全不生效,需要改用自定义网络
  • 把别名当负载均衡:客户端缓存与长连接让分流失真,应用应改用专门的负载均衡
  • 别名与容器名混用排查:别名变化不体现在容器名上,排查时容易对不上
  • 忘记清理旧容器的别名记录:解析结果里长期存在已下线地址,出现偶发连接超时

数据来源与参考

  • Docker Docs:docker run --network-alias

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌