无法连接在 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 服务器的主要内容,如果未能解决你的问题,请参考以下文章

docker nodejs容器无法连接mysql容器

无法连接到在 Docker 操场上运行的 mysql 服务器 docker 容器

mysql docker容器 - 无法与Windows连接

Docker撰写mysql连接失败

Spring Boot + MySQL docker 容器

Mariadb docker容器无法使用Python连接到主机上的MySQL服务器(111连接被拒绝)