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

Docker Compose部署MariaDB显示unhealthy但数据库可正常访问,求排查

问题原因及解决方案

核心错误

你的健康检查命令用了宿主机的映射端口4306,但Docker健康检查是在容器内部执行的,容器内的MariaDB默认监听3306端口,端口映射4306:3306仅作用于宿主机到容器的流量转发,容器内部访问自身数据库不需要使用这个映射端口,因此健康检查命令无法连接到数据库,导致状态显示unhealthy。

修正后的compose.yml配置

移除健康检查命令中的端口参数(默认连接容器内的3306端口),同时建议用环境变量替代明文密码,避免敏感信息泄露:

services:
  db:
    image: mariadb:10.11.10-ubi9
    volumes:
      - mysqldata:/var/lib/mysql
    ports:
      - 4306:3306
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_USER: spring
      MYSQL_PASSWORD: spring
      MYSQL_DATABASE: spring
    healthcheck:
      test: ["CMD", "mysql", "-u", "spring", "-p${MYSQL_PASSWORD}", "-D", "spring", "-Bse", "SELECT 1"]
      start_interval: 3s
      start_period: 15s
      interval: 2m
      retries: 3
      timeout: 5s

volumes:
  mysqldata:

额外优化建议

你也可以直接使用MariaDB官方镜像自带的健康检查脚本,逻辑更全面可靠:

healthcheck:
  test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
  start_interval: 3s
  start_period: 15s
  interval: 2m
  retries: 3
  timeout: 5s

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 23:12:33