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
相关产品推荐
相关产品推荐

