You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot服务通过Docker Compose连接MySQL容器失败求助

Docker Compose部署SpringBoot连接MySQL容器失败:Access Denied报错

问题现象

使用Docker Compose部署SpringBoot服务(userjob)连接MySQL容器(dbmysql)时,出现数据库连接拒绝错误:

java.sql.SQLException: Access denied for user 'admin'@'172.18.0.10' (using password: YES)

已尝试修改端口(如3307),问题仍未解决。

配置文件与报错日志

docker-compose.yml

dbmysql:
  container_name: dbmysql
  image: mysql:latest
  restart: unless-stopped  
  environment:
    MYSQL_ROOT_PASSWORD: "password"
    MYSQL_USER: "admin"
    MYSQL_DATABASE: freelance

  ports:
    - "3306:3306"
  volumes:
    - /var/lib/docker/volumes/freelance_volume/_data

userjob:
  depends_on:
    - dbmysql
    - eureka-server
  image: userjob:latest
  container_name: userjob
  build:
    context: userjob/.
    dockerfile: Dockerfile.layered #docker file path (. means current directory)
  ports:
    - "8000:8000"
  environment:
    - spring.datasource.url=jdbc:mysql://dbmysql:3306/freelance
    - spring.datasource.username=admin
    - spring.datasource.password="password"
    - log.level.root=debug

完整报错日志

java.sql.SQLException: Access denied for user 'admin'@'172.18.0.10' (using password: YES) 
2023-02-22T17:36:09.797671197Z   at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-j-8.0.31.jar:8.0.31] 
2023-02-22T17:36:09.797672529Z   at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-j-8.0.31.jar:8.0.31] 
2023-02-22T17:36:09.797673778Z    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-j-8.0.31.jar:8.0.31] 
2023-02-22T17:36:09.797674920Z    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:448) ~[mysql-connector-j-8.0.31.jar:8.0.31] 
2023-02-22T17:36:09.797676415Z   at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-j-8.0.31.jar:8.0.31] 
2023-02-22T17:36:09.797677642Z     at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-j-8.0.31.jar:8.0.31] 
2023-02-22T17:36:09.797678805Z     at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-5.0.1.jar:na] 
2023-02-22T17:36:09.797679943Z    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) ~[HikariCP-5.0.1.jar:na] 
2023-02-22T17:36:09.797681125Z    at com.zaxxer.hikari.pool.PoolBase.

排查与解决方案

1. 补全MySQL用户密码环境变量

当前dbmysql的配置中缺少MYSQL_PASSWORD变量,这是创建admin用户时必须的参数,添加后才能正确设置用户密码:

dbmysql:
  # 其他配置不变
  environment:
    MYSQL_ROOT_PASSWORD: "password"
    MYSQL_USER: "admin"
    MYSQL_PASSWORD: "password" # 新增该行
    MYSQL_DATABASE: freelance

2. 修正SpringBoot密码配置的引号问题

环境变量中spring.datasource.password="password"的引号会被解析为密码的一部分,导致密码不匹配,直接去掉引号:

userjob:
  # 其他配置不变
  environment:
    - spring.datasource.url=jdbc:mysql://dbmysql:3306/freelance?useSSL=false&serverTimezone=UTC
    - spring.datasource.username=admin
    - spring.datasource.password=password # 去掉引号
    - log.level.root=debug

同时建议在JDBC URL中添加useSSL=false&serverTimezone=UTC,避免SSL和时区引发的额外问题。

3. 检查并修正MySQL用户连接权限

进入dbmysql容器,验证admin用户的连接权限:

docker exec -it dbmysql mysql -uroot -ppassword

在MySQL命令行执行:

SELECT user, host FROM mysql.user WHERE user='admin';

如果host值为localhost或127.0.0.1,说明该用户仅允许本地连接,需要修改为允许Docker子网连接:

GRANT ALL PRIVILEGES ON freelance.* TO 'admin'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

%表示允许任意IP连接,也可以指定为172.18.0.%限制连接范围。

4. 清理残留的Docker卷数据

如果之前创建过freelance_volume卷,可能存在旧的MySQL数据(比如错误的用户配置),删除卷后重新初始化:

docker-compose down -v
docker-compose up -d

-v参数会删除关联的卷,确保MySQL容器重新创建时生成正确的用户和数据库。

5. 确保MySQL服务就绪后启动SpringBoot

depends_on仅保证容器启动顺序,无法确保MySQL服务已就绪。添加健康检查让SpringBoot等待MySQL可用:

dbmysql:
  # 其他配置不变
  healthcheck:
    test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uadmin", "-ppassword"]
    interval: 5s
    timeout: 5s
    retries: 5

userjob:
  depends_on:
    dbmysql:
      condition: service_healthy
    eureka-server:
      condition: service_started
  # 其他配置不变

内容的提问来源于stack exchange,提问作者Alex So

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:48:19