java - 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
)将两者部署在同一个容器网络上,但错误仍然存在。
解决方案
使用标志使用容器的旧链接时。--link
“链接”容器可作为正在运行的容器中的主机使用它的容器名称。因此,在您的情况下, mysql 容器在您的应用程序容器中可用 hostname mysql
。
因此,您的数据库 url 应该是:jdbc:mysql://mysql:3306/spring_app_db?autoReconnect=true&failOverReadOnly=false&maxReconnects=10
推荐阅读
- google-apps-activity - 如何使用 Google Activity API 通过 Presentation ID 获取 PDF 导出日志
- unity3d - Unity UI 文本变黑
- sql - 什么时候必须使用 PLSQL 而不是 SQL?
- python - 烧瓶我可以多次渲染模板吗?
- django - 配置不当的 Django API 视图
- ios - 如何在scrollView结束减速之前运行动画?
- javascript - 强制同步客户端函数异步执行或在一段时间后终止同步函数
- autodesk-forge - 大型模型转换失败,并显示“提取器中的用户可恢复退出代码:-532462766”错误消息
- jquery - 如何将css变成if语句
- xcode - 使用 10.14 SDK 构建 - 但 Info.plist 中的 DTSDKName 值为 macosx10.7