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

从Airflow容器连接Docker中MySQL容器失败,请求排查

问题原因

你遇到的是Docker容器网络隔离问题:Airflow和MySQL分别通过独立的docker-compose部署,默认会创建各自的专属网络,Airflow容器所在网络无法解析MySQL容器的名称mi_mysql,导致连接失败。同时,你的连接配置误用了宿主机映射的端口4004,容器间直接访问应该使用MySQL容器内部的3306端口。

解决方案

方案1:合并到同一个docker-compose.yml

将Airflow和MySQL服务放到同一个配置文件中,它们会自动加入同一网络,直接用容器名访问即可。

示例合并后的配置结构:

version: '3'
services:
  # 复制Airflow官方docker-compose中的所有服务
  airflow-webserver:
    ... # 保留官方配置内容
  airflow-scheduler:
    ... # 保留官方配置内容
  # 其他Airflow相关服务...

  # MySQL服务
  mysql:
    image: mysql:latest
    container_name: mi_mysql
    restart: always
    ports:
        - '4004:3306'
    environment:
      MYSQL_ROOT_PASSWORD: matitorres
      MYSQL_DATABASE: testfligoo
    volumes:
      - ./init:/docker-entrypoint-initdb.d

修改Airflow连接配置:

  • host: mi_mysql
  • port: 3306(使用容器内部端口,而非宿主机映射的4004)

方案2:创建共享Docker网络

手动创建共享网络,让两个容器加入同一网络实现互通。

  1. 创建共享网络:
docker network create shared_network
  1. 修改MySQL的docker-compose.yml,指定加入共享网络:
version: '3'
services:
  mysql:
    image: mysql:latest
    container_name: mi_mysql
    restart: always
    ports:
        - '4004:3306'
    environment:
      MYSQL_ROOT_PASSWORD: matitorres
      MYSQL_DATABASE: testfligoo
    volumes:
      - ./init:/docker-entrypoint-initdb.d
    networks:
      - shared_network

networks:
  shared_network:
    external: true
  1. 修改Airflow的docker-compose.yml,加入同一共享网络:
    在配置末尾添加网络声明:
networks:
  default:
    external: true
    name: shared_network
  1. 修改Airflow连接配置:
  • host: mi_mysql
  • port: 3306
额外检查项

确保Airflow连接配置中的login为root(对应MySQL的MYSQL_ROOT_PASSWORD),schema为testfligoo(对应MySQL的MYSQL_DATABASE),与MySQL环境变量配置完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 21:37:17