【问题标题】:Unable to connect to mySql running on my host from docker container无法从 docker 容器连接到在我的主机上运行的 mySql
【发布时间】:2017-05-03 06:55:47
【问题描述】:

我已经部署了一个 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: 通讯链路故障

最后一个成功发送到服务器的数据包是 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?

【问题讨论】:

标签: java mysql docker


【解决方案1】:

在docker容器内,localhost指的是容器本身,除非你使用--network host,否则会有其他后果。相反,您希望使用主机的 IP 地址10.10.35.129 来引用主机。

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

【讨论】:

  • 我什至尝试通过添加标志 --network host 来运行容器。还是同样的问题。 :(
  • 使用该标志,尝试使用 127.0.0.1
猜你喜欢
  • 2020-10-20
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2018-03-15
  • 2020-11-26
  • 2017-06-13
  • 1970-01-01
  • 2016-01-05
相关资源
最近更新 更多