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

Docker-Compose首次启动时Liquibase无法连接MySQL数据库

解决Docker-Compose中Liquibase首次启动无法连接MySQL的问题

问题背景

通过Docker-Compose搭建开发环境,包含MySQL容器(database)和Liquibase容器,数据通过my-db卷实现持久化。但首次执行docker-compose up或删除卷后启动时,Liquibase容器无法连接MySQL。原healthcheck仅检测MySQL服务是否可ping通,未验证目标数据库及用户权限是否完全就绪。

优化方案

1. 强化MySQL的healthcheck配置

将原healthcheck的测试命令替换为直接连接目标数据库并执行查询,确保数据库初始化完成、用户权限配置正确。同时调整启动等待时长,适配首次启动的初始化耗时。

2. 配置Liquibase依赖MySQL的健康状态

在Liquibase的depends_on中添加健康检查条件,确保仅当MySQL完全就绪后才启动Liquibase。

修改后的完整配置

liquibase:
  image: liquibase/liquibase:latest
  volumes:
    - ./CBCDevDB/:/liquibase/changelog/
  environment:
    - INSTALL_MYSQL=true
  command: --defaultsFile=/liquibase/changelog/liquibase.dev.properties update
  networks:
    - lbdb
  depends_on:
    database:
      condition: service_healthy # 等待MySQL健康检查通过后启动

database:
  image: mysql:latest
  environment:
    - MYSQL_DATABASE=db
    - MYSQL_USER=liquibase
    - MYSQL_PASSWORD=liquibase
    - MYSQL_ROOT_PASSWORD=example
  restart: always
  ports:
    - "3307:3306"
  command: --default-authentication-plugin=mysql_native_password
  volumes:
    - my-db:/var/lib/mysql
  networks:
    - lbdb
    - backend
  healthcheck:
    test:
      [
        "CMD",
        "mysql",
        "-u${MYSQL_USER}",
        "-p${MYSQL_PASSWORD}",
        "-hlocalhost",
        "-D${MYSQL_DATABASE}",
        "-e",
        "SELECT 1;"
      ]
    start_period: 10s # 延长首次启动等待时长,适配数据库初始化
    interval: 5s
    timeout: 5s
    retries: 15 # 增加重试次数,避免初始化超时

volumes:
  my-db:

networks:
  lbdb: {}
  backend: {}

配置说明

  • healthcheck测试命令:mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} -hlocalhost -D${MYSQL_DATABASE} -e "SELECT 1;" 会直接连接到指定的db数据库,执行简单查询。只有当数据库存在、用户拥有访问权限、MySQL服务完全就绪时,命令才会返回成功。
  • start_period:设置为10秒,给MySQL足够的时间完成首次启动时的数据库创建、用户权限配置等初始化操作。
  • depends_on condition:service_healthy确保Liquibase不会在MySQL未就绪时提前启动,彻底解决连接失败问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 03:57:28