我对码头工人很新,
我有一个简单的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)
我该怎么做?我被卡住了请帮助我。 感谢。
答案 0 :(得分:1)
Linux主机
使用网络模式主机启动容器。 docker run --network host ...
。这将使容器与主机共享网络堆栈。因此,从容器到localhost:3306
的连接将连接到数据库。
MAC的Docker
从应用程序容器内部连接到docker.for.mac.localhost:3306
而不是localhost:3306
。 docker.for.mac.localhost
是一个特殊的DNS名称,它将解析为主机的IP。
适用于Windows的Docker
在Windows计算机上运行 ipconfig ,找到Ethernet adapter vEthernet (DockerNAT)
网络接口的IP地址。使用该IP连接到数据库。