docker --link 是早期单向容器互联机制,通过在接收容器 /etc/hosts 中注入别名解析及环境变量实现通信,要求源容器必须运行;现代推荐使用自定义 bridge 网络替代,支持双向通信、内置 dns 解析和跨容器扩展。

Docker 的 --link 是一种早期的手动容器互联方式,适用于没有 Docker Compose、不使用自定义网络、又需要快速让两个已存在容器建立可通信别名的场景。它不是现代推荐做法,但对老项目维护或临时调试仍具实用价值。
核心前提必须满足
源容器(被链接的那个)必须已处于 running 状态;目标容器(执行 --link 的那个)在启动时才动态获取其 IP 和环境变量。
怎么让 Java 应用容器连上 MySQL 容器(无 Compose)
假设你已有运行中的 MySQL 容器:
docker run -d \ --name mysql-db \ -e MYSQL_ROOT_PASSWORD=pass123 \ -p 3306:3306 \ mysql:8.0
再启动你的 Java 应用容器,并 link 到它:
docker run -d \ --name my-java-app \ --link mysql-db:db \ -p 8080:8080 \ -v $(pwd)/app.jar:/app.jar \ openjdk:17-jre-slim \ java -jar /app.jar
注意 --link mysql-db:db:
-
mysql-db是源容器名(必须正在运行) -
db是你在 Java 容器里用来访问它的主机名别名
Java 应用内部怎么用这个 link
在 Java 应用中,数据库连接 URL 不再写死 172.17.0.x 这类浮动 IP,而是直接用别名:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
jdbc:mysql://db:3306/myapp?useSSL=false&serverTimezone=UTC
Docker 会自动完成两件事:
- 在
my-java-app容器的/etc/hosts中添加一行:172.17.0.3 db mysql-db(IP 随每次启动变化,但别名始终有效) - 注入环境变量,例如:
DB_PORT_3306_TCP=tcp://172.17.0.3:3306DB_PORT_3306_TCP_ADDR=172.17.0.3DB_PORT_3306_TCP_PORT=3306
你也可以在 Java 启动脚本里读取这些变量做动态拼接,比如:
java -Ddb.host=$DB_PORT_3306_TCP_ADDR -Ddb.port=$DB_PORT_3306_TCP_PORT -jar /app.jar
常见问题与绕过技巧
-
Link 是单向的:
my-java-app能ping db,但mysql-db无法ping my-java-app。如需双向,得反向再启一个带--link的容器,或改用自定义 bridge 网络。 -
容器重启后 IP 变了?没关系:
--link每次启动新容器时都会重新查源容器当前 IP 并更新/etc/hosts,所以别名始终可用。 -
Java 连不上?检查三件事:
-
docker ps确认mysql-db确实在Up状态 - 进入
my-java-app容器:docker exec -it my-java-app sh,执行ping db或nslookup db看是否解析成功 - MySQL 是否监听
0.0.0.0:3306(默认只监听127.0.0.1,需加配置bind-address = 0.0.0.0)
-
为什么不建议长期用 link
- 官方自 Docker 1.10 起标记为 deprecated,19.03 仍保留但明确提示“will be removed in a future release”
- 无法跨主机,无法配合 Swarm 或 Kubernetes
- 所有 link 关系必须在启动时声明,运行中不能追加
- 大量容器时
/etc/hosts膨胀、管理混乱
替代方案很简单:
docker network create mynet docker run --network mynet --name mysql-db ... docker run --network mynet --name my-java-app ...
然后 Java 直接用 jdbc:mysql://mysql-db:3306/... —— 更干净、双向、可扩展。
不复杂但容易忽略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










