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

Docker Compose部署FastAPI连接MySQL自定义端口时连接失败求助

问题原因

在Docker Compose的网络环境中,每个容器都是独立的网络节点,127.0.0.1对API容器来说指向自身,而非MySQL容器。虽然你配置了依赖健康检查,但主机地址错误导致连接被拒绝。单独启动MySQL后本地跑API能成功,是因为此时127.0.0.1指向你的宿主机,而MySQL容器端口映射到了宿主机的17001端口。

解决步骤

1. 修改数据库配置文件的DB_HOST

把配置里的DB_HOST=127.0.0.1改成Docker Compose中MySQL服务的名称(比如你配置的database),示例:

# 数据库配置示例
DB_HOST = "database"
DB_PORT = 3306  # 注意:这里用容器内部的MySQL默认端口,不是宿主机映射的17001
DB_USER = "your_user"
DB_PASSWORD = "your_password"
DB_NAME = "your_db"

2. 检查Docker Compose配置

确保你的docker-compose.yml配置符合以下要求:

  • MySQL服务的端口映射正确(宿主机17001映射到容器3306)
  • API服务的依赖和健康检查配置正确,示例:
version: '3.8'
services:
  database:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: your_root_pw
      MYSQL_DATABASE: your_db
      MYSQL_USER: your_user
      MYSQL_PASSWORD: your_password
    ports:
      - "17001:3306"  # 宿主机端口:容器内部端口
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 5s
      timeout: 5s
      retries: 5

  api:
    build: ./your_api_dir
    depends_on:
      database:
        condition: service_healthy  # 等待数据库健康检查通过
    environment:
      - DB_HOST=database  # 可在这里覆盖配置,或直接用修改后的配置文件
      - DB_PORT=3306
    ports:
      - "8000:8000"

3. 重启服务

执行以下命令重新部署:

docker compose down
docker compose up --build
关键说明
  • 容器间通信使用服务名作为主机名,Docker Compose会自动在内部网络中解析对应的容器IP。
  • 容器内部的MySQL端口是默认的3306,宿主机映射的17001是给外部访问用的,容器间通信不需要使用这个映射端口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:22:04