【问题标题】:(Docker+SpringBoot+Mysql) Mysql connection refused(Docker+SpringBoot+Mysql) Mysql连接被拒绝
【发布时间】:2020-07-04 03:26:18
【问题描述】:

问题描述

Spring Boot(app) 容器无法连接到“mysql”容器

问题输出

原因:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:无法创建与数据库服务器的连接。尝试重新连接 3 次。放弃。

application.properties

spring.datasource.username = root
spring.datasource.url = jdbc:mysql://mysql:3306/fms?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false
spring.datasource.password = manager@123

docker-compose.yml

version: '3.7'
services:  
    mysql:
        image: mysql:latest
        restart: always
        command: --default-authentication-plugin=mysql_native_password
        ports:
            - "33061:3306"
        networks:
            - spring-boot-mysql-network
        environment:
            MYSQL_DATABASE: fms
            MYSQL_ROOT_PASSWORD: manager@123
        volumes:
            - ./database_storage:/docker-entrypoint-initdb.d

    app:
        build:
            context: .
            dockerfile: app.Dockerfile
        ports: 
            - "8091:8080"
        networks:
            - spring-boot-mysql-network
        depends_on: 
            - mysql

    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        container_name: phpmyadmin
        restart: always
        depends_on: 
            - mysql
        environment: 
            PMA_HOST: database
            PMA_PORT: 3306
        ports:
            - "9091:80"

networks:
    spring-boot-mysql-network:
        driver: bridge

【问题讨论】:

  • 尝试"3306:3306" 而不是"33061:3306" 或使用33061 作为jdbc:mysql://mysql:33061....... 上的端口号
  • 感谢您的回复 :) 但是我已经尝试了您的两个解决方案。它仍然显示“连接被拒绝”
  • 装有MySQL的容器是否启动? MySQL是在容器内启动的吗?有防火墙阻碍吗?
  • yes.docker ps 显示状态(最多 3 分钟)
  • 我什至可以通过(mysql -h 192.168.32.2 -P 3306 -u root -p)从我的主机使用它的 ip 连接“mysql容器”

标签: java mysql spring spring-boot docker


【解决方案1】:

您的设置在我看来是正确的。但是,您使用的是 MySQL 的最新 docker 映像(在撰写本文时为 8.0.x)。因此,您得到的异常表明您的 MySQL 连接器和 MySQL 服务器版本之间存在兼容性问题。您在 Spring Boot 应用程序中使用的是哪个版本的 MySQL Connector/J?您需要更新连接器或降级 MySQL docker 镜像版本。

【讨论】:

  • 感谢您的回复 :) 我使用的是 5.1.45 版本的 MYSQL 连接器。我刚刚尝试将 'latest' 替换为 5.7 。但没有成功。你能提出任何进一步的建议吗?
  • @Dipesh 抱歉,我提供了错误的链接。我的意思是最新版本的 MySQL Connector/J,即8.0.19(我现在修复了链接)。 MySQL docker 版本没问题,你可以把它留在latest,但如果你也设置确切的 docker 版本会更好,例如mysql:8.0.
  • 即使使用 mysql:8.0 和 connector:8.0.19 ,连接也会被拒绝:(
  • @Dipesh 你能提供整个异常日志吗?如果您设置了任何休眠设置,也请提供您的休眠设置。
【解决方案2】:

您可以尝试将 mysql 连接器版本更新为mysql-connector-java-8.0.11

【讨论】:

  • 感谢您的回复。正如您所说,我已将 mysql-connector 更新到 8.0.11。但仍然拒绝连接
【解决方案3】:

我犯了一个愚蠢的错误。

我正在更新我的 application.property 文件和 docker-compose up --build。但是我从来没有重新打包过war文件。所以我正在阅读我的旧war文件,从而阅读我的旧属性文件

【讨论】:

  • 是 insaan ko 100 kaude maare jaye。 ;)
猜你喜欢
  • 2022-01-22
  • 2020-10-07
  • 2018-06-08
  • 2016-03-08
  • 2020-10-08
  • 1970-01-01
  • 2022-01-23
  • 2020-01-19
  • 2019-06-06
相关资源
最近更新 更多