mysql - docker compose:spring boot连接到mysql数据库被拒绝
问题描述
我对 Docker 很陌生,我需要在 docker 工具箱上使用 docker-compose 启动我的 Angular/SpringBoot/MySQL 项目。我将一个 docker yml 文件复制到我的项目中,该文件使用了相同的技术并更改了其中的路径以匹配我的项目。但是,当我尝试 docker-compose 时,它会引发以下错误:
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
[...] 84 common frames omitted
Caused by: java.net.ConnectException: Connection refused (Connection refused)
docker-compose.yml 看起来像:
version: '3'
services:
database:
image: mysql
container_name: database
environment:
MYSQL_ROOT_PASSWORD: ****
MYSQL_DATABASE: db_example
MYSQL_USER: springuser
MYSQL_PASSWORD: ****
ports:
- 3306:3306
volumes:
- db_exampleData:/var/lib/mysql
springapi:
image: openjdk:10-jre-slim
container_name: springapi
ports:
- 8443:8443
depends_on:
- database
volumes:
- ./backend/target/backend-0.1.0.jar:/application.jar
command: ["java", "-jar", "application.jar"]
angular:
image: nginx:alpine
container_name: angular
ports:
- 4200:80
depends_on:
- springapi
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./frontend/my-app/dist/my-app:/usr/share/nginx/html
volumes:
db_exampleData:
应用程序属性:
spring.jpa.hibernate.ddl-auto=none
spring.jpa.open-in-view=false
spring.datasource.url=jdbc:mysql://localhost:3306/db_example
spring.datasource.username=springuser
spring.datasource.password=****
server.port=8443
任何建议都会有所帮助!
解决方案
你需要像这样改变你的连接:
jdbc:mysql://database:3306/db_example
并将其添加到服务下的 docker-compose 中springapi
:
links:
- database
另一方面,您可以使用wait-for-it.sh通过在服务下添加命令部分来检查 DB 是否已启动springapi
:
command: ["path/to/wait-for-it.sh", "database:3306", "-t", "6000", "--", "YOUR ACTUAL COMMAND"]
推荐阅读
- typescript - 如何使用“标记”类型来索引记录?
- powershell - 如何在不知道其名称的情况下获取 powershell 中文件的完整路径?
- groovy - Groovy:递归且轻松地创建对象
- r - R中的条件过滤
- .net-core - IFeatureCollection 已在 ServiceStack 中处理错误
- android - Flutter:如何在 JSON 结构中添加键值对?
- docker - 将 Github Action 与 Docker 和“--privileged”一起使用
- python - 使用质量守恒重新网格化 netcdf 文件
- asp.net - Context.Principal 在 Web API 调用的情况下为空
- r - ggplot2 的图例与离散和连续变量的交互