mysql - 无法连接到在 Docker 容器内运行的 MySQL(使用 docker-maven-plugin 配置)
问题描述
我在连接到在 Docker 容器内运行的 MySQL 服务器时遇到问题。这是一个docker-maven-plugin
配置。
<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>
我在日志中看到 MySQL 已成功启动:
04:20:18.583 TC2020-10-12T04:20:18.583211Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
[INFO] DOCKER> Pattern 'mysqld: ready for connections' matched for container 2f7f66ba896c
04:20:18.611 TC2020-10-12T04:20:18.610295Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.21' socket: '/var/run/mysqld/mysqld.sock' port: 0 MySQL Community Server - GPL.
04:20:18.625 TC2020-10-12 04:20:18+00:00 [Note] [Entrypoint]: Temporary server started.
04:20:23.415 TCWarning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
[INFO] DOCKER> [mysql:8.0] "database": Waited on log out 'mysqld: ready for connections' 172861 ms
04:20:23.415 TCWarning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it.
通过 JDBC 连接时出错,maven-failsafe-plugin
无法连接:我尝试使用localhost:3308
、127.0.0.1:3308
和0.0.0.0:3308
连接10.0.75.0:3308
。此外,尝试了网络类型bridge
、host
和container
.
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)
解决方案
它主要是关于mysql版本。
如果您尝试使用 mysql:5.7 它可能会起作用
后续版本的安全要求有所不同。
它可以被禁用
default_authentication_plugin=mysql_native_password
但我不知道将它放在 docker-maven-plugin 中的哪个位置。
推荐阅读
- python - 使用 selenium 发送用户名和密码
- sql - 使用 jsreport 的空白 pdf 输出
- api - 来自 MS Graph API 的调用统计错误
- php - 通过循环将一系列 PHP 变量转换为 JSON 对象
- swiftui - 创建 iOS 应用小部件时如何使数据跨文件夹可用?
- mongodb - MongoDB中有一个集合。几乎所有字段都需要查询或排序。如何设计和优化它?
- git - 'git remote add' 不创建 repo
- docker - k8s 使用服务 DNS 名称从私有注册表中提取图像
- javascript - Selenium:向下滚动直到元素的“样式”发生变化
- python - 在 Python 中使用条件更改分类列中的值