无法使用JDBC连接到mySql docker容器

我使用Docker Maven插件

当testing集成开始时,我可以通过以下命令在terminal的容器上连接到mysql:

mysql -h 127.0.0.1 -P 32795 -uroot -p 

和万物运作良好,但是当我想连接在Java应用程序的JDBC与JDBC与这个代码:

 Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection connection = DriverManager.getConnection( "jdbc:mysql://127.0.0.1:" + System.getProperty("mysqlPort") + "/dashboardmanager", "root", "root" ); 

我得到这个错误:

 org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Cannot create PoolableConnectionFactory (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 org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) ~[spring-jdbc-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:615) ~[spring-jdbc-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:866) ~[spring-jdbc-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:927) ~[spring-jdbc-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:937) ~[spring-jdbc-4.2.4.RELEASE.jar:4.2.4.RELEASE] 

我试过了:

 export _JAVA_OPTIONS="-Djava.net.preferIPv4Stack=true" 

 System.setProperty("java.net.preferIPv4Stack" , "true"); 

但没有任何改变。

Docker Maven Plugin Conf:

 <plugin> <groupId>org.jolokia</groupId> <artifactId>docker-maven-plugin</artifactId> <version>${docker-maven-plugin.version}</version> <configuration> <images> <image> <name>mysql:5.7.11</name> <run> <env> <MYSQL_ROOT_PASSWORD>root</MYSQL_ROOT_PASSWORD> <MYSQL_DATABASE>dashboardmanager</MYSQL_DATABASE> </env> <ports> <port>mysqlPort:3306</port> </ports> </run> </image> </images> </configuration> <executions> <execution> <id>start</id> <phase>pre-integration-test</phase> <goals> <goal>start</goal> </goals> </execution> <execution> <id>stop</id> <phase>post-integration-test</phase> <goals> <goal>stop</goal> </goals> </execution> </executions> </plugin> 

问题是这样的:

MySql启动过程大约需要40秒,所以我应该停留大约40秒,然后尝试连接到mySql,这么简单:)

或者我可以在pom.xml中使用这些设置:

 <image> <name>mysql:5.7.11</name> <alias>mysqlContainer</alias> <run> <env> <MYSQL_ROOT_PASSWORD>root</MYSQL_ROOT_PASSWORD> <MYSQL_DATABASE>dashboard</MYSQL_DATABASE> </env> <ports> <port>mysqlPort:3306</port> </ports> <wait> <log>.*port: 3306 MySQL Community Server.*</log> <time>120000</time> </wait> </run> </image> 

确保你的MySQLconfiguration文件( my.cnf )在mysql容器中设置使用:

 bind-address = 0.0.0.0 

正如在这个答案中所解释的(对于反向的情况:连接到运行在docker容器的主机上的mysql,但这里的想法是一样的),在网桥模式下,将bind-address设置为广播模式将有助于validationmysql是否可重新启动。

注意:如果你使用bind-address = 0.0.0.0你的MySQL服务器将侦听所有networking接口上的连接。 这意味着你的MySQL服务器可以通过Internet访问; 确保相应地设置防火墙规则。

在这个testing之后,勾选“ 如何连接到在主机上运行的容器中的mysql ”

默认情况下,root只能访问本地主机127.0.0.1&:: 1,您需要特别允许从192.168.99.1或从用户设置中的任何地方使用'%'进行访问。
请参阅“ 保护初始MySQL帐户 ”。