java不能连接mysql,无法使用Docker将Java程序连接到MySQL

我正在学习docker并试图将使用Tomcat的Java Web应用程序放到容器中.我遵循了一些基本的教程,但我找不到适合我的解决方案.如果我运行我的数据库和Java容器我得到错误:

SEVERE: Unable to create initial connections of pool.

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

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:404)

at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:981)

at com.mysql.jdbc.MysqlIO.(MysqlIO.java:339)

at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2253)

at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2286)

at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2085)

at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:795)

at com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:44)

MySQL Dockerfile

FROM mysql:latest

ENV MYSQL_DATABASE=db_name #name of db that is required by Java program

由……运营:

docker run --name db_name -e MYSQL_ROOT_PASSWORD=root -d db_name

Java Dockerfile

FROM tomcat:7.0.70-jre8

ADD deploy /usr/local/tomcat/webapps #extracted .war

ADD jdbc /usr/local/tomcat/lib #MySQL jdbc drivers

ADD context /usr/local/tomcat/conf #context.xml

由……运营:

docker run --name app_name --link db_name:db_name -p 8080:8080 -d app_name

当我在Eclipse中本地运行时,整个配置运行正常.

解决方法:

因为你没有提供完整的堆栈tace,这将显示tomcat正在使用的连接字符串,我不得不猜测你没有为你的tomcat conainer提供正确的连接字符串.你必须提供一个连接字符串,如:

jdbc:mysql://database_container_name:3306/database_name

进入你的tomcat配置.

BTW:

您应该重新排列Tomcat Dockerfile中的行

FROM tomcat:7.0.70-jre8

ADD jdbc /usr/local/tomcat/lib #MySQL jdbc drivers

ADD context /usr/local/tomcat/conf #context.xml

ADD deploy /usr/local/tomcat/webapps #extracted .war

因为docker可以缓存构建层.使用旧订单,您的战争是图像的第一层,每次您对应用程序进行更改时都会更改,导致每次都重建folliwing图层,即使它们没有更改.新订单更好地使用了docker chache.使用此顺序,永远不会更改MySQL驱动程序,并且配置也不会像战争一样快速地改变.

在这个例子中,效果可能是最小的,但是如果你用更多的图层和更长的构建步骤构建更大的图像(比如apt-get install smth),chache可以显着加快你的构建速度.

标签:java,docker,mysql,tomcat,tomcat7

来源: https://codeday.me/bug/20190702/1353396.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值