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

Docker容器化SpringBoot应用无法连接同docker-compose下MariaDB问题咨询

问题原因
  1. 启动顺序不匹配:depends_on仅控制容器的启动先后顺序,不会等待MariaDB完成内部初始化流程。MariaDB容器启动后需要几十毫秒到几秒的时间完成配置加载、用户创建、端口监听等逻辑,此时SpringBoot应用已经启动并发起连接请求,就会收到连接拒绝的报错。
  2. 环境变量覆盖失效:如果SpringBoot镜像打包时硬编码了配置,或者使用了优先级高于环境变量的配置源(比如 jar 包外放置的优先级更高的配置文件),会导致你设置的spring.datasource.url环境变量没有生效,应用还是使用localhost地址发起连接,容器内自然无法连通数据库。
  3. 本地残留数据异常:你挂载的本地目录./out/users_db如果存在之前运行生成的旧数据库文件,可能会导致MariaDB启动异常、端口监听失败,无法正常接受连接。
解决方案
  • 配置容器健康检查,确保数据库就绪后再启动应用
    修改docker-compose.yml的对应配置即可:
services:
  users:
    image: <MY_HOST>/users:0.0.1-SNAPSHOT
    container_name: users
    environment:
      spring.datasource.url: jdbc:mariadb://users-db:3306/users
    ports:
      - "9003:9003"
    depends_on:
      users-db:
        condition: service_healthy
    networks:
      - my-network

  users-db:
    image: mariadb:10.6.4
    restart: always
    container_name: users-db
    environment:
      MYSQL_ROOT_PASSWORD: admin
      MYSQL_DATABASE: users
      MYSQL_USER: testuser
      MYSQL_PASSWORD: test
    ports:
      - "3306:3306"
    command: --default-authentication-plugin=mysql_native_password
    networks:
      - my-network
    volumes:
      - ./out/users_db:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "testuser", "-ptest"]
      interval: 3s
      timeout: 10s
      retries: 10
  • 验证环境变量是否生效
    服务启动后执行命令进入SpringBoot容器:docker exec -it users bash,执行printenv | grep spring.datasource.url,确认输出的连接地址为jdbc:mariadb://users-db:3306/users即可。
  • 清理残留数据测试
    先执行docker-compose down -v停止并删除相关容器、匿名卷,再清空本地的./out/users_db目录,最后执行docker-compose up -d重新启动服务即可。
  • 可选:配置SpringBoot连接重试
    在application.properties中添加配置,延长连接超时时间:
spring.datasource.hikari.connection-timeout=30000

如果还是偶现连接失败,可以引入spring-retry依赖,配置数据库连接失败自动重试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:18:04