首页/云/Docker 容器速查/遗留的 --link 用法与其局限
网络与存储52 条

遗留的 --link 用法与其局限

--link 是早期给默认 bridge 容器提供通信与 hosts 记录的手段,自定义网络出现后已不作为推荐方式,新部署应避免继续使用。

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

什么是 --link

--link 是 Docker 早期为默认 bridge 网络提供的容器互联手段:它在目标容器的 /etc/hosts 里写入别名记录,并注入一批环境变量。自定义网络出现后,容器之间可以直接用服务名解析,--link 已不再推荐,新部署应避免继续使用。

基本信息

语法--link 目标容器:别名(别名可省略)
现状遗留特性,只在默认 bridge 下有意义
推荐替代自定义网络(docker network create)
副作用注入环境变量、隐式建立启动依赖

典型使用场景

  • 阅读与迁移历史脚本:理解老项目如何表达容器间依赖
  • 维护无法改造的遗留部署,短期维持现状
  • 对比学习:了解自定义网络出现前容器互联的通行做法
  • 排查老项目启动顺序问题:--link 的隐式依赖常是重启死锁来源

旧写法与推荐替代

旧写法与推荐替代
docker network create app-net                     # 推荐:先建自定义网络
docker run -d --name db --network app-net postgres:16-alpine
# 老写法:靠 --link 建立别名与环境变量,仅作演示
docker run -d --name web-old --link db:db app/web:1.0
# 新写法:同网络内直接按服务名访问
docker run -d --name web --network app-net app/web:1.0
docker exec web getent hosts db                   # 自定义网络自带名称解析

两种互联方式对照

维度--link自定义网络
名称解析写入 /etc/hosts内建解析服务
依赖顺序隐式、易死锁由编排层显式管理
环境变量会注入一批变量不注入
适用性仅默认 bridge当前推荐方式
自定义网络自带名称解析与网络隔离,既不需要 --link 也不需要维护容器启动顺序;迁移时注意老脚本可能读取 --link 注入的环境变量,切换后这些变量会消失。
自定义网络里容器互相访问用的是服务名或别名,与容器名并不总是同一个字符串;迁移脚本时把老别名映射关系先列清楚,避免改完互相连不上。
--link 建立的是单向可见关系:A 链接 B 之后 A 能解析 B,反过来不成立;这一点与自定义网络的双向解析差别很大,排障时容易判断错方向。
在容器重建或改名后,--link 记录会随容器一起消失,而自定义网络的名称解析按当前在线的服务动态维护,稳定性明显更好。

易错点

  • --link 建立的隐式依赖容易造成容器重启顺序死锁,编排场景应交给 Compose 或更上层的依赖管理
  • 迁移到自定义网络后,依赖 /etc/hosts 记录或注入环境变量的旧脚本会失效,迁移前先全局搜索这些用法
  • --link 只在默认 bridge 网络下有意义,写进自定义网络不会按预期生效
  • 误以为 --link 提供隔离能力:它只负责互通与命名,隔离要靠自定义网络实现

数据来源与参考

  • Docker 官方文档:Legacy container links(docs.docker.com/network/links)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌