无法从docker容器连接到我的主机上运行的mySql
我已经部署了一个docker容器,它具有从openjdk7基础镜像构build的简单Java-JDBC代码。
现在我有我的本地机器上的端口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); } } }
重build我的问题:
如何连接到docker contaimner在主机上运行的mysql?
在Docker容器内, localhost指的是容器本身,除非你使用--network host
,这有其他的后果。 相反,您要使用其IP地址10.10.35.129
来引用主机。
mysql
命令不能在容器中工作的原因是你没有安装它。 默认情况下,在Docker中,networking,进程,文件系统和用户(等等)都在容器内分离。