无法连接在 docker 容器上运行的 mysql 服务器
Posted
技术标签:
【中文标题】无法连接在 docker 容器上运行的 mysql 服务器【英文标题】:Not Able to connect mysql server running on docker container 【发布时间】:2020-09-28 04:54:52 【问题描述】:我在 docker 容器中运行 sql server`
docker pull mysql/mysql-server:latest
docker run --name=my_sql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 mysql/mysql-server:latest
docker exec -it my_sql mysql -u root -p
#Create table in mysql running in container.
CREATE DATABASE hello_java CHARACTER SET utf8 COLLATE utf8_general_ci;
这一切都成功地完成了。 现在,当我尝试使用 Java 连接到 db 时,出现错误。
String url = "jdbc:mysql://192.168.56.101:3306/hello_java";
DriverManager.getConnection(url, "root", "1234");
System.out.println("Connection establised....");
192.168.56.101 是我的虚拟机的 ip。我在 VM 上运行 Linux。
我收到通信链路故障错误。
我用谷歌搜索并在以下链接上找到了一些解决方案,但没有一个对我有用。
Solving a "communications link failure" with JDBC and MySQL
How to connect with MySQL DB running as container in docker?
我对 /etc/my.cnf 文件进行了更改,但似乎没有帮助。
谢谢。
【问题讨论】:
所以你有你的主机操作系统,里面有你的 Linux VM (192.168.56.101),里面有你的 MySQL docker 容器,对吧?如果你 ssh 进入你的 Linux VM,你可以使用 mysql 命令行客户端从 Linux VM 连接到 MySQL 吗?例如mysql -u root -h 127.0.0.1 -p
。如果是这样,您能否使用 mysql 客户端(CLI 或 GUI)从主机操作系统连接到 Linux VM,以确保端口 3306 对 VM 开放?
端口已打开。我可以从我的主机操作系统telnet 192.168.56.101 3306
。 192.168.56.101 是我的虚拟机的 IP。
【参考方案1】:
我做了更多的 RnD 并找到了以下解决方案。
String url = "jdbc:mysql://192.168.56.101:3306/mysql?allowPublicKeyRetrieval=true&useSSL=false";
在查询中添加allowPublicKeyRetrieval=true&useSSL=false
有助于我连接数据库。
以下链接对解决方案很有用。
Connection Java-MySql : Public Key Retrieval is not allowed
https://www.tutorialspoint.com/how-to-disable-establishing-ssl-connection-without-server-s-identity-verification-is-not-recommended-warning-when-connecting-to-mysql-database-in-java
谢谢。
【讨论】:
以上是关于无法连接在 docker 容器上运行的 mysql 服务器的主要内容,如果未能解决你的问题,请参考以下文章