首页 > 解决方案 > Spring boot jar docker部署抛出与MySQL容器的连接异常

问题描述

我今天才开始探索 docker,我一直在尝试启动由 MySQL DB 支持的 Spring Boot Web 应用程序。

我拉了一个 MySQL 容器并使用以下命令运行它:

docker run -t --name mysql-docker-container -p 3306:3306 -e MYSQL_ROOT_PASSWORD=**** -e MYSQL_DATABASE=spring_app_db -e MYSQL_USER=app_user -e MYSQL_PASSWORD=**** -d mysql

我的application.properties文件:

spring.datasource.url=jdbc:mysql://0.0.0.0:3306/spring_app_db?autoReconnect=true&failOverReadOnly=false&maxReconnects=10
spring.datasource.username=app_user
spring.datasource.password=test123

spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

有了这个,当我在 IDE 中运行我的 spring boot 时,它能够连接并在 db 表上执行 CRUD。但是,当我尝试在 docker 上部署它并与 MySQL 容器链接时,它会抛出 Connection Refused 错误。我的 Dockerfile:

FROM openjdk:11
LABEL maintainer="baljinder@gmail.com"
VOLUME /tmp
EXPOSE 8080
ADD target/demo-0.0.1-SNAPSHOT.jar bootmysql.jar
ENTRYPOINT ["java", "-jar", "bootmysql.jar"]

我用来运行引导的 docker 映像的命令:

docker run -t --name spring-jpa-container -p 8080:8080 --link mysql-docker-container:mysql spring-jpa-app

有人可以帮忙吗?我尝试通过创建 docker 网络(docker network create -d bridge sql_spring_network)将两者部署在同一个容器网络上,但错误仍然存​​在。

标签: javamysqlspring-bootdocker

解决方案


使用标志使用容器的旧链接时。--link“链接”容器可作为正在运行的容器中的主机使用它的容器名称。因此,在您的情况下, mysql 容器在您的应用程序容器中可用 hostname mysql

因此,您的数据库 url 应该是:jdbc:mysql://mysql:3306/spring_app_db?autoReconnect=true&failOverReadOnly=false&maxReconnects=10


推荐阅读