docker - 为什么我不能通过 Docker-compose 将 spring-boot 容器连接到 mysql sql 容器?
问题描述
如何将 mysql 容器与 spring-boot 应用程序容器连接起来。我尝试使用网络,然后尝试使用 docker-compose,但似乎我的 spring-boot 应用程序无法连接。
码头工人-compose.yml
version: '3'
services:
mysql-docker-container:
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=my_app
volumes:
- /data/mysql
authenticate:
image: authenticate
build:
context: ./
dockerfile: Dockerfile
depends_on:
- mysql-docker-container
ports:
- "8080:8080"
volumes:
- /data/authentica
应用程序属性
#cấu hình Spring Datasource, JPA, App Properties
spring.datasource.url= jdbc:mysql://my-docker-container:3306/my_app?useSSL=false
spring.datasource.username= root
spring.datasource.password= root
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation= true
spring.jpa.properties.hibernate,dialect = org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.ddl-auto= update
spring.datasource.platform=mysql
spring.datasource.initialization-mode=always
#App
pin.app.jwtSecret = pinSecretKey
pin.app.jwtExpirationMs = 86400000
然后我在compose中通过网络修复它
version: '3'
services:
mysql-docker-container:
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=my_app
volumes:
- /data/mysql
ports:
- "3306:3306"
networks:
- "my-network"
authenticate:
image: authenticate
build:
context: ./
dockerfile: Dockeerfile
depends_on:
- mysql-docker-container
ports:
- "8080:8080"
volumes:
- /data/authentica
networks:
- "my-network"
networks:
my-network:
并没有什么不同
解决方案
您的服务名称和连接字符串不同,您应该使用 docker-compose 中定义的确切服务名称或容器名称。
将连接字符串更改为
spring.datasource.url= jdbc:mysql://mysql-docker-container:3306/my_app?useSSL=false
更新:
如果连接字符串不能解决问题,那么可能有两个可能的原因
- 应用程序在数据库容器准备好接受连接之前尝试连接
- 无法创建请求的服务 [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
由于在这种情况下depends_on:
不会解决您的问题,DB 容器需要一些时间来接受连接。您可以在应用程序端使用等待或处理重试逻辑来做一些事情。
推荐阅读
- kotlin - 星型注释
- r - 在绘图之外添加组符号
- javascript - Redux RTK Query:仅使列表中的单个元素无效
- python - 使用 for 循环和列表理解更改大小写
- android - 如何访问android java中的所有视频
- reactjs - 仅在从 API 获取时获取 403 状态
- c# - ASP.NET Core MVC:即使存在一个视图也找不到
- java - Android Java - ServerSocket 在 wifi 上监听,发送带有蜂窝数据的帖子
- r - 无法通过 renv::restore() 安装包(“R 在编译期间无法找到一个或多个 FORTRAN 库。”)
- discord.js - 我正在尝试让我的机器人使用频道 ID 将消息发送到特定频道