Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法从docker容器连接到主机上运行的mySql_Java_Mysql_Docker - Fatal编程技术网

Java 无法从docker容器连接到主机上运行的mySql

Java 无法从docker容器连接到主机上运行的mySql,java,mysql,docker,Java,Mysql,Docker,我已经部署了一个docker容器,其中包含从openjdk7基本映像构建的简单Java JDBC代码 现在我已经在3306端口的本地机器上运行了mysql。现在如何从docker容器连接到主机上运行的mysql 我使用以下方法部署了容器: docker run -it -p 25000:27000 -p 3307:3306 94e56cffbdf7 bash 但在容器中,当我尝试运行Java代码时,会出现如下错误: com.mysql.jdbc.exceptions.jdbc4.Communi

我已经部署了一个docker容器,其中包含从openjdk7基本映像构建的简单Java JDBC代码

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

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

docker run -it -p 25000:27000 -p 3307:3306 94e56cffbdf7 bash
但在容器中,当我尝试运行Java代码时,会出现如下错误:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 通信链路故障

成功发送到服务器的最后一个数据包为0毫秒 以前驱动程序尚未从服务器收到任何数据包

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

mysql -h 10.10.35.129 -p 3307 -u root -p
其中10.01.35.129是主机的ip

我得到一个错误:

bash:mysql:未找到命令

作为参考,我还附加了我试图在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中,网络、进程、文件系统和用户(以及其他)在容器中都是分开的。

通过添加标志
--网络主机
,我甚至尝试运行容器,但可能与此重复。还是一样的问题(使用该标志,尝试使用127.0.0.1