无法连接到Docker容器中运行的MySQL(使用Docker maven插件配置)
我在连接Docker容器中运行的MySQL服务器时遇到问题。这里是一个无法连接到Docker容器中运行的MySQL(使用Docker maven插件配置),mysql,docker,maven,Mysql,Docker,Maven,我在连接Docker容器中运行的MySQL服务器时遇到问题。这里是一个docker-maven插件配置 <plugin> <groupId>io.fabric8</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.34.1</version> <extensions>true</ext
docker-maven插件
配置
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.34.1</version>
<extensions>true</extensions>
<configuration>
<images>
<image>
<alias>database</alias>
<name>mysql:8.0</name>
<run>
<log>
<prefix>TC</prefix>
<date>default</date>
<color>cyan</color>
</log>
<wait>
<log>mysqld: ready for connections</log>
<time>750000</time>
</wait>
<env>
<MYSQL_ROOT_PASSWORD>${test.database.password}</MYSQL_ROOT_PASSWORD>
<MYSQL_DATABASE>${test.database.name}</MYSQL_DATABASE>
<MYSQL_USER>${test.database.username}</MYSQL_USER>
<MYSQL_PASSWORD>${test.database.password}</MYSQL_PASSWORD>
</env>
<ports>
<port>3308:3306</port>
</ports>
</run>
</image>
</images>
</configuration>
<executions>
<execution>
<id>docker:start</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>docker:stop</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
通过JDBC连接时出错,maven故障保护插件
连接失败:我尝试连接localhost:3308
,127.0.0.1:3308
,0.0.0:3308
和10.0.75.0:3308
。另外,尝试了网络类型、网桥
、主机
和容器
04:20:31.697 TCWarning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
04:20:31.697 TCWarning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
.09:50:31.962 [main] INFO com.zaxxer.hikari.HikariDataSource - jdbc:mysql://localhost:3308/test_db_name?useSSL=false&trustServerCertificate=false&serverSslCert= - Starting...
.09:50:33.291 [main] ERROR com.zaxxer.hikari.pool.HikariPool - jdbc:mysql://localhost:3308/test_db_name?useSSL=false&trustServerCertificate=false&serverSslCert= - Exception during pool initialization.
java.sql.SQLNonTransientConnectionException: Could not connect to address=(host=localhost)(port=3308)(type=master) : Could not connect to localhost:3308 : unexpected end of stream, read 0 bytes from 4 (socket was closed by server)
at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.createException(ExceptionFactory.java:73)
at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.create(ExceptionFactory.java:192)
at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:1346)
at org.mariadb.jdbc.internal.util.Utils.retrieveProxy(Utils.java:634)
at org.mariadb.jdbc.MariaDbConnection.newConnection(MariaDbConnection.java:150)
at org.mariadb.jdbc.Driver.connect(Driver.java:89)
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138)
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:354)
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202)
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:473)
at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:554)
Docker网络配置:
主要是关于mysql版本 如果您尝试使用mysql:5.7,它可能会起作用 在以后的版本中,安全性要求是不同的 它可以通过以下方式禁用: 默认\u身份验证\u插件=mysql\u本机\u密码
但是我不知道把它放在docker maven插件的什么地方。最后
mysql:5.7
成功了。我没有尝试禁用此默认\u身份验证\u插件
。问题是,在容器中,MySQL在日志中打印了两次mysqld:ready for connections
。最后的打印是在临时服务器停止后进行的
。在此之前的任何连接尝试都将导致失败。更好的选择是检查MySQL init进程是否完成。准备启动。在日志中,因为它只打印一次。
04:20:31.697 TCWarning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
04:20:31.697 TCWarning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
.09:50:31.962 [main] INFO com.zaxxer.hikari.HikariDataSource - jdbc:mysql://localhost:3308/test_db_name?useSSL=false&trustServerCertificate=false&serverSslCert= - Starting...
.09:50:33.291 [main] ERROR com.zaxxer.hikari.pool.HikariPool - jdbc:mysql://localhost:3308/test_db_name?useSSL=false&trustServerCertificate=false&serverSslCert= - Exception during pool initialization.
java.sql.SQLNonTransientConnectionException: Could not connect to address=(host=localhost)(port=3308)(type=master) : Could not connect to localhost:3308 : unexpected end of stream, read 0 bytes from 4 (socket was closed by server)
at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.createException(ExceptionFactory.java:73)
at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.create(ExceptionFactory.java:192)
at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:1346)
at org.mariadb.jdbc.internal.util.Utils.retrieveProxy(Utils.java:634)
at org.mariadb.jdbc.MariaDbConnection.newConnection(MariaDbConnection.java:150)
at org.mariadb.jdbc.Driver.connect(Driver.java:89)
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138)
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:354)
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202)
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:473)
at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:554)