Docker 里很容易遇到一种情况:
两个容器都正常运行,但是一个容器就是访问不到另一个容器。
例如:
Java
↓
MySQL
Java 容器本身能够正常启动,但是连接 MySQL 时一直失败。
最容易犯的错误,是在 Java 配置里写:
localhost:3306
因为在 Docker 容器内部,localhost 指向的是当前容器自己。
也就是说:
Java 容器
localhost
↓
Java 容器自己
而不是:
Java 容器
↓
MySQL 容器
如果两个容器加入了同一个 Docker Network,那么通常应该直接使用 MySQL 容器的服务名访问:
mysql:3306
于是网络关系变成:
Java 容器
↓
mysql
↓
MySQL 容器
所以 Docker 环境里看到 localhost 的时候,最好先确认一下:
这个 localhost 到底是谁的 localhost?