无法从docker container

时间:2017-05-03 06:55:47

标签: java mysql docker

我已经部署了一个docker容器,它有一个简单的Java-JDBC Code构建,来自openjdk7基础映像。

现在我在端口3306上的本地计算机上运行mysql。现在如何从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?

1 个答案:

答案 0 :(得分:1)

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

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

相关问题