gpt4 book ai didi

java - 无法从 docker 容器连接到在我的主机上运行的 mySql

转载 作者:行者123 更新时间:2023-11-28 23:16:22 27 4
gpt4 key购买 nike

我已经部署了一个 docker 容器,该容器具有从 openjdk7 基础镜像构建的简单 Java-JDBC 代码。

现在我有 mysql 在我的本地机器上运行在端口 3306 上。现在我如何从 docker 容器连接到主机上运行的 mysql?

我已经使用以下方法部署了容器:

docker run -it -p 25000:27000 -p 3307:3306 94e56cffbdf7 bash

但是在容器中,当我尝试运行 javaCode 时,出现如下错误:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

如果我尝试使用以下命令连接到 mysql:

mysql -h 10.10.35.129 -p 3307 -u root -p

10.01.35.129 是我主机的 ip。

我得到错误:

bash: mysql: command not found

作为引用,我还附上了我试图在 docker 容器中运行的 Java 代码:

package jdbcCodes;

import java.sql.*;

public class MySqlJDBC {

public static void main(String[] args) {
try{
Class.forName("com.mysql.jdbc.Driver");
// here testEmp is DB name and root is user and xxx os password
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3307/testEmp","root","xxx");
Statement stmt = con.createStatement();
ResultSet rs=stmt.executeQuery("select * from tempEntry");
while(rs.next()){
System.out.println(rs.getInt(1)+" "+rs.getString(2));
}
con.close();
}
catch(Exception e){
System.out.println(e);
}
}
}

重复我的问题:
如何从 docker contaimner 连接到主机上运行的 mysql?

最佳答案

在 docker 容器内,localhost 指的是容器本身,除非您使用 --network host,这会产生其他后果。相反,您想使用主机的 IP 地址 10.10.35.129 来引用主机。

mysql 命令在容器中不起作用的原因是您没有安装它。默认情况下,在 docker 中,网络、进程、文件系统和用户(以及其他)都在容器内分离。

关于java - 无法从 docker 容器连接到在我的主机上运行的 mySql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43753145/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com