首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用Docker将Java程序连接到MySQL

问无法使用Docker将Java程序连接到MySQL
EN

Stack Overflow用户
提问于 2016-07-30 20:56:57
回答 1查看 3K关注 0票数 4

我正在学习docker,并尝试使用Tomcat将我的Java应用程序放到容器中。我遵循了一些基本的教程,但我没有找到适当的解决方案,对我。如果运行我的数据库和java容器,就会得到以下错误:

代码语言:javascript
复制
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.<init>(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.<init>(ConnectionImpl.java:795)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:44)

MySQL文档

代码语言:javascript
复制
FROM mysql:latest
ENV MYSQL_DATABASE=db_name #name of db that is required by Java program

经过:

代码语言:javascript
复制
docker run --name db_name -e MYSQL_ROOT_PASSWORD=root -d db_name

Java Dockerfile

代码语言:javascript
复制
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

经过:

代码语言:javascript
复制
docker run --name app_name --link db_name:db_name -p 8080:8080 -d app_name

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-31 11:06:59

因为您没有提供完整的堆栈tace,这将显示tomcat使用的连接字符串,所以我不得不猜测您没有为tomcat conainer提供正确的连接字符串。您必须提供如下所示的连接字符串:

代码语言:javascript
复制
jdbc:mysql://database_container_name:3306/database_name

进入你的tomcat配置。

BTW:

应该将Tomcat Dockerfile中的行重新排列为

代码语言:javascript
复制
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可以缓存构建层。按照旧的顺序,您的war是映像的第一层,每次对应用程序进行更改时都会更改,导致每次都重新生成折叠层,即使它们没有更改。新订单更好地使用了码头杂货。使用此命令,永不更改的MySQL驱动程序总是被缓存,配置也不会像war那样快速改变。

在本例中,效果可能很小,但是如果您构建了更大的图像,并且具有更多的层和冗长的构建步骤(如apt-get install smth),则chache可以显着地加快您的构建速度。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38678432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档