docker-compose执行airflow-init挂起,容器间无网络连接如何解决
可行解决方案
方案1:修复Docker与nftables兼容性(Arch环境高频触发原因)
Arch Linux 默认使用 nftables 作为防火墙后端,而 Docker 20.10.x 版本默认调用 iptables-legacy 生成规则,二者不兼容会导致桥接网络转发失效,出现容器间通信超时。
操作步骤:
- 安装iptables-nft包,替换系统默认的iptables后端:
pacman -S iptables-nft - 切换iptables后端为nft:
update-alternatives --set iptables /usr/bin/iptables-nftupdate-alternatives --set ip6tables /usr/bin/ip6tables-nft - 重启Docker服务:
systemctl restart docker - 清理之前的失效容器、网络,重新执行初始化命令:
docker-compose down -vdocker-compose up airflow-init
方案2:修改Docker网桥默认网段,避免与宿主机网段冲突
如果宿主机局域网网段是172.17.x.x/16,和Docker默认桥接网段重合,会导致路由转发异常。
操作步骤:
- 编辑
/etc/docker/daemon.json,添加自定义网段配置:
{ "bip": "192.168.100.1/24", "default-address-pools": [ {"base":"192.168.101.0/24","size":24} ] }
- 重启Docker服务:
systemctl restart docker - 重新执行初始化流程。
方案3:手动指定airflow-init的数据库连接地址为宿主机IP
如果上述网络问题暂时无法定位,可直接绕过容器间通信,用宿主机IP访问postgres服务:
操作步骤:
- 确认postgres服务已经配置了
5432:5432端口映射,且宿主机防火墙开放5432端口 - 修改docker-compose.yaml中airflow-init服务的环境变量
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN,将其中的postgres替换为宿主机的局域网IP,示例:postgresql+psycopg2://airflow:airflow@192.168.31.100:5432/airflow - 所有依赖数据库的服务(webserver、scheduler、worker等)都同步修改该环境变量
- 重新执行初始化命令。
内容的提问来源于stack exchange,提问作者maln0ir
相关产品推荐
相关产品推荐

