【问题标题】:Docker run - MySQL Springboot Connection refusedDocker 运行 - MySQL Springboot 连接被拒绝
【发布时间】:2022-01-22 08:27:58
【问题描述】:

我是 Docker 新手,一直在尝试 Dockerize 一个简单的 springboot 和 MySQL 项目。

我已经为 spring boot 创建了一个镜像,并且还有一个用于我的 springboot 项目的容器和一个用于 MySQL 的单独容器。

当我尝试记录 MySQL 部分的容器日志时,它可以正常工作。

docker 容器日志 mysql-standalone


2021-12-20T18:27:56.109823Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2021-12-20T18:27:56.184989Z 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.
2021-12-20T18:27:56.375549Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
2021-12-20T18:27:56.376015Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.27'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.

但是,当我尝试登录 Springboot 项目时出现错误

**docker 容器日志 springboot-docker **

com.mysql.cj.jdbc.exceptions.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 com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-java-8.0.27.jar!/:8.0.27]
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) ~[mysql-connector-java-8.0.27.jar!/:8.0.27]
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-java-8.0.27.jar!/:8.0.27]
    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:448) ~[mysql-connector-java-8.0.27.jar!/:8.0.27]
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-java-8.0.27.jar!/:8.0.27]
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-java-8.0.27.jar!/:8.0.27]
    at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-4.0.3.jar!/:na]
    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) ~[HikariCP-4.0.3.jar!/:na]
    at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-4.0.3.jar!/:na]
    at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) ~[HikariCP-4.0.3.jar!/:na]
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[HikariCP-4.0.3.jar!/:na]
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) ~[HikariCP-4.0.3.jar!/:na]
    at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-4.0.3.jar!/:na]
    at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) ~[hibernate-core-5.6.1.Final.jar!/:5.6.1.Final]

我当前的容器

当我尝试使用 IDE 在本地运行项目时,它运行良好,端点工作正常,没有错误。

我不太清楚问题出在哪里,如果有人有什么想法请告诉我。


新错误

java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110) ~[mysql-connector-java-8.0.27.jar!/:8.0.27]
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.27.jar!/:8.0.27]
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-java-8.0.27.jar!/:8.0.27]
    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:448) ~[mysql-connector-java-8.0.27.jar!/:8.0.27]
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-java-8.0.27.jar!/:8.0.27]
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-java-8.0.27.jar!/:8.0.27]
    at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-4.0.3.jar!/:na]
    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) ~[HikariCP-4.0.3.jar!/:na]
    at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-4.0.3.jar!/:na]
    at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) ~[HikariCP-4.0.3.jar!/:na]
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[HikariCP-4.0.3.jar!/:na]
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) ~[HikariCP-4.0.3.jar!/:na]
    at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-4.0.3.jar!/:na]

application.properties(数据库配置)

spring.datasource.url=jdbc:mysql://mysql-standalone:3306/docker_demo?useSSL=false
spring.datasource.username=root
spring.datasource.password=password
spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.MySQL5InnoDBDialect

【问题讨论】:

    标签: java mysql spring-boot docker


    【解决方案1】:

    更新01:更新了cmd,写在这里是为了代码块

    docker run --name mysql-standalone -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=docker-demo -e MYSQL_USER=demo -e MYSQL_PASSWORD=password -d mysql:8.0.27
    

    简短回答:您需要使用指定的端口运行 docker 容器,如下所示:

    docker run -it -p 3306:3306 mysql
    

    那么你应该能够连接:) 如果您分享您的 docker 文件或 docker-compose,我将很乐意为您提供帮助。

    更长的答案是您需要将容器端口绑定到您的主机网络,以便非 dockerized 服务能够访问容器上的端口。这在必须在同一台机器上运行多个 mysql 容器时非常有用,然后你只需绑定到不同的主机端口,一切都应该很好:)

    【讨论】:

    • 感谢您的快速响应,我的 Dockerfile 看起来像这样 ` FROM 采用openjdk/openjdk11:alpine-jre ADD target/docker-0.0.1-SNAPSHOT.jar springboot-mysql-docker.jar EXPOSE 8089 ENTRYPOINT ["java","-jar","springboot-mysql-docker.jar"] `抱歉格式化
    • 你用什么命令来运行 mysql 容器?这就是我们需要调整的命令:-)
    • MySQL docker run --name mysql-standalone -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=docker-demo -e MYSQL_USER=demo -e MYSQL_PASSWORD=password -d mysql: 8.0.27 Springboot docker run -d --name springboot-docker --link mysql-standalone:mysql springboot-docker
    • 我用更新的命令更新了我的原始响应。如果你像这样启动容器,它应该可以工作。不要忘记关闭当前容器。
    • 谢谢,我会尽快让你知道
    猜你喜欢
    • 2020-07-04
    • 2021-06-24
    • 1970-01-01
    • 2019-01-02
    • 2020-10-07
    • 2018-06-08
    • 2020-01-19
    • 2016-03-08
    • 2020-10-08
    相关资源
    最近更新 更多