java - docker中连接的Java JDBC无法连接到主机数据库
问题描述
我有一个运行 Spring Boot 并使用 JDBC 连接到数据库的 Maven 容器。
我想连接到主机数据库
(主机:Ubuntu/18.04.5 LTS(仿生海狸))
(数据库:mysql Ver 14.14 Distrib 5.7.35,适用于使用 EditLine 包装器的 Linux (x86_64))
这是我的连接字符串
this.conn = DriverManager.getConnection("jdbc:mysql://172.24.0.1:3306/myDB?"+"user=xxxx&password=xxxx");
这是我的容器 IP
$ip route show
default via 172.24.0.1 dev eth0
172.24.0.0/16 dev eth0 proto kernel scope link src 172.24.0.10
我可以在 Maven 容器中使用 IP 172.24.0.1 或 172.17.0.1 telnet 和 mysql 登录
$telnet 172.24.0.1 3306
Trying 172.24.0.1...
Connected to 172.24.0.1.
Escape character is '^]'.
telnet 172.17.0.1 3306
Trying 172.17.0.1...
Connected to 172.17.0.1.
Escape character is '^]'.
但是,我无法通过 JDBC 与 IP 172.24.0.1 或 172.17.0.1 连接。
解决方案
如果要连接到运行 docker 映像的主机上安装的数据库,则连接字符串中的主机名应为 host.docker.internal。
DriverManager.getConnection("jdbc:mysql://host.docker.internal:3306/myDB?"+"user=xxxx&password=xxxx");
推荐阅读
- asynchronous - “跨越异步边界”的含义
- c# - 将属性添加到多对多关系
- node.js - 在服务器端 NodeJS Application Insights 事件中添加经过身份验证的用户 ID 信息
- alexa - alexa 技能包开发人员控制台测试模拟器不生成 IntentRequest 事件
- android - 在方向更改时调整 ConstraintLayout
- python - 工作的经过时间?
- python - 从文本文件中提取单词
- angular - 如何过滤出单个值但使用 Angular 5 和 Angular Material 显示其他所有内容
- reactjs - 如何使用 React 和 Redux 从另一个组件访问 ref?
- android - 根据 TextView 值打开 Activity