从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网络
手动创建共享网络,让两个容器加入同一网络实现互通。
- 创建共享网络:
docker network create shared_network
- 修改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
- 修改Airflow的docker-compose.yml,加入同一共享网络:
在配置末尾添加网络声明:
networks: default: external: true name: shared_network
- 修改Airflow连接配置:
- host:
mi_mysql - port:
3306
额外检查项
确保Airflow连接配置中的login为root(对应MySQL的MYSQL_ROOT_PASSWORD),schema为testfligoo(对应MySQL的MYSQL_DATABASE),与MySQL环境变量配置完全匹配。
内容的提问来源于stack exchange,提问作者Matias Torres
相关产品推荐
相关产品推荐

