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

如何启动MySQL数据库并连接本地API?Docker部署连接失败求助

Docker Compose部署下API无法连接MySQL 5.7的解决方案

问题背景

使用Docker Compose部署MySQL 5.7与Python Flask API时,API尝试连接数据库服务database:3306失败,报错:

mysql.connector.errors.InterfaceError: 2003: Can't connect to MySQL server on 'database:3306' (111 Connection refused)

核心原因

depends_on仅控制容器的启动顺序,不会等待MySQL完成初始化并就绪接受连接。API启动时,MySQL可能仍在执行初始化逻辑(如运行init.sql、创建数据库对象等),此时无法建立有效连接。


解决方案1:使用Docker健康检查(推荐)

修改docker-compose.yml,为数据库服务添加健康检查规则,让API在数据库完全就绪后再启动:

version: '3.0'

services:
  database:
    build:
      context: ./
      dockerfile: ./project/docker/DockerfileDB
    image: tp5_ima_db_ltn_ad
    environment:
      MYSQL_ROOT_PASSWORD: "root"
    ports:
      - 3306:3306
    healthcheck:
      # 用mysqladmin ping检查数据库是否就绪
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-proot"]
      interval: 5s       # 每5秒检查一次
      timeout: 5s        # 超时时间5秒
      retries: 5         # 最多重试5次
  api:
    build:
      context: ./
      dockerfile: ./project/docker/DockerfileAPI
    image: tp5_ima_api_ltn_ad
    environment:
      INFRA_TP5_DB_TYPE: "MYSQL"
      INFRA_TP5_DB_HOST: "database"
      INFRA_TP5_DB_PORT: 3306
      INFRA_TP5_DB_USER: "root"
      INFRA_TP5_DB_PASSWORD: "root"
    volumes:
      - .:/mnt/app
    ports:
      - 15555:5555
    depends_on:
      database:
        condition: service_healthy  # 等待数据库服务处于健康状态

解决方案2:在API启动脚本中添加等待逻辑

修改API的启动脚本run.sh,在启动API前先等待MySQL可用:

#!/bin/bash
# 循环等待MySQL就绪
until mysql -h database -u root -proot -e "SELECT 1"; do
  echo "等待MySQL数据库启动..."
  sleep 2
done

# 启动API服务
exec python3 "$@"

执行以下命令确保脚本有执行权限:

chmod +x run.sh

额外排查步骤

  1. 检查MySQL初始化日志:查看容器日志确认init.sql是否执行正常,是否有语法错误导致数据库启动失败:
docker-compose logs database
  1. 确认MySQL监听地址:进入MySQL容器,执行netstat -tulpn,确保mysqld监听0.0.0.0:3306(默认配置为该地址,若不是则需修改MySQL配置文件绑定0.0.0.0)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 15:33:26