Docker Compose部署Spring Boot+MySQL应用失败求助
解决Docker中Spring Boot与MySQL容器通信异常问题
核心问题:容器间网络寻址错误
你的应用容器配置里,数据库URL用了localhost:3306——但在Docker容器内部,localhost指向的是应用容器自身,而非MySQL容器。Docker Compose会自动为所有服务创建共享网络,直接用服务名(这里是db)就能访问对应容器的服务。
第一步:修正数据库连接地址
把docker-compose.yml里的SPRING_DATASOURCE_URL改成以下内容:
SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/crm?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
allowPublicKeyRetrieval=true:解决MySQL 8.0+版本的公钥检索权限问题serverTimezone=UTC:避免时区不匹配导致的连接超时或报错
验证用户与密码配置
你提到MySQL Workbench使用的用户是bestuser,但当前配置文件里用的是bestuser123,请确认:
docker-compose.yml中MYSQL_USER与应用配置的SPRING_DATASOURCE_USERNAME完全一致- 如果打算用root用户连接,需将
SPRING_DATASOURCE_USERNAME改为root,密码对应MYSQL_ROOT_PASSWORD的值
其他优化建议
- 修正Hibernate方言:MySQL 8.0不再兼容
MySQL5Dialect,需改为对应版本的方言,可在环境变量中直接配置:
SPRING_JPA_PROPERTIES_HIBERNATE_DIALECT: org.hibernate.dialect.MySQL8Dialect
- 确保MySQL服务就绪后再启动应用:
depends_on仅保证容器启动顺序,不确保MySQL服务完全可用。添加健康检查来解决这个问题:
在docker-compose.yml的db服务中加入健康检查配置:
healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"] interval: 5s timeout: 5s retries: 5
同时修改app-server的depends_on配置:
depends_on: db: condition: service_healthy
- 统一配置优先级:Docker Compose的环境变量会覆盖
application.properties中的配置,确保两者的用户名、密码、数据库名完全一致。
修正后的完整docker-compose.yml示例
version: '3.7' services: app-server: build: context: . dockerfile: Dockerfile ports: - "8081:8080" restart: always depends_on: db: condition: service_healthy environment: SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/crm?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC SPRING_DATASOURCE_USERNAME: bestuser123 SPRING_DATASOURCE_PASSWORD: bestuser123 SPRING_JPA_PROPERTIES_HIBERNATE_DIALECT: org.hibernate.dialect.MySQL8Dialect db: image: mysql:8.0 ports: - "3307:3306" restart: always environment: MYSQL_DATABASE: crm MYSQL_USER: bestuser123 MYSQL_PASSWORD: bestuser123 MYSQL_ROOT_PASSWORD: bestuser123 healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"] interval: 5s timeout: 5s retries: 5
内容的提问来源于stack exchange,提问作者user20432214
相关产品推荐
相关产品推荐

