如何为localhost /已经存在的数据库运行docker容器,而不创建任何mysql服务器?

时间:2017-09-26 12:10:18

标签: java mysql docker

我对码头工人很新, 我有一个简单的java应用程序的jar文件连接到localhost:3306上的数据库,我不想创建任何新的docker mysql服务器,我希望我的应用程序与我现有的数据库连接。 我想从docker运行这个jar。我的Dockerfile是

 FROM java:8  
     COPY . /var/www/java  
     WORKDIR /var/www/java  
     CMD ["java", "-jar","exp.jar"]

但显示错误

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:
   Communications link failure Last packet sent to the server was 0 ms
   ago. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
   Method) at
   sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
   at
   sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
   at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at
   com.mysql.jdbc.Util.handleNewInstance(Util.java:406) at
   com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
   at
   com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2103)
   at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:718) at
   com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46) at
   sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
   at
   sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
   at
   sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
   at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at
   com.mysql.jdbc.Util.handleNewInstance(Util.java:406) at
   com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302) at
   com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
   at java.sql.DriverManager.getConnection(DriverManager.java:664) at
   java.sql.DriverManager.getConnection(DriverManager.java:247) at
   com.linkeztech.code.App.main(App.java:37) Caused by:
   java.net.ConnectException: Connection refused (Connection refused)

我该怎么做?我被卡住了请帮助我。 感谢。

1 个答案:

答案 0 :(得分:1)

Linux主机

使用网络模式主机启动容器。 docker run --network host ...。这将使容器与主机共享网络堆栈。因此,从容器到localhost:3306的连接将连接到数据库。

MAC的Docker

从应用程序容器内部连接到docker.for.mac.localhost:3306而不是localhost:3306docker.for.mac.localhost是一个特殊的DNS名称,它将解析为主机的IP。

适用于Windows的Docker

在Windows计算机上运行 ipconfig ,找到Ethernet adapter vEthernet (DockerNAT)网络接口的IP地址。使用该IP连接到数据库。