[Question]: build docker images error on Mac M4

用户按照 RAGFlow 官方文档在 Mac M4 上执行 docker build --build-arg LIGHTEN=1 -f Dockerfile -t infiniflow/ragflow:nightly-slim . 命令时,Dockerfile 中的 apt install 阶段无法

快速结论:在 Mac M4(Apple Silicon/ARM64)上构建 RAGFlow Docker 镜像时,apt 包下载失败,报错 Connection failed。优先尝试使用 --build-arg NEED_MIRROR=0 禁用镜像源,或改用 Docker Buildx 构建。

问题场景

用户按照 RAGFlow 官方文档在 Mac M4 上执行 docker build --build-arg LIGHTEN=1 -f Dockerfile -t infiniflow/ragflow:nightly-slim . 命令时,Dockerfile 中的 apt install 阶段无法下载 OpenJDK 等依赖包,导致构建中断。RAGFlow 官方仅提供 x86 镜像,ARM64 用户需要自行构建。

报错原文

Err:1 http://ports.ubuntu.com/ubuntu-ports jammy-updates/main arm64 openjdk-11-jre-headless arm64 11.0.28+6-1ubuntu1~22.04.1
  Connection failed [IP: 198.18.0.15 80]
Err:2 http://ports.ubuntu.com/ubuntu-ports jammy-updates/main arm64 openjdk-11-jdk-headless arm64 11.0.28+6-1ubuntu1~22.04.1
  Connection failed [IP: 198.18.0.15 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

尝试使用 openjdk-8 替代后同样失败:

Err:1 http://ports.ubuntu.com/ubuntu-ports jammy-updates/universe arm64 openjdk-8-jre-headless arm64 8u462-ga~us1-0ubuntu2~22.04.2
  Connection failed [IP: 185.125.190.36 80]

原因分析

可能原因:

  • 网络连接问题:Docker 构建过程中无法连接到 Ubuntu ports 源(ARM64 仓库),报错 IP 指向本地代理或网络中间设备。
  • 镜像源配置问题:当 NEED_MIRROR=1 时,Dockerfile 会将源替换为清华大学 TUNA 镜像,但该镜像可能对部分 ARM64 包同步不及时或连接被阻。
  • Docker 网络环境问题:在 macOS 上通过 Docker Desktop 构建时,默认网络模式可能导致无法正确解析或连接外部仓库。

环境排查

  • 确认 Docker 版本(建议 Docker Desktop 4.x+)。
  • 确认是否已安装 Docker Buildx 插件(macOS Docker Desktop 默认集成)。
  • 检查本地网络代理、VPN 或 DNS 设置是否拦截了 ports.ubuntu.com 的访问。
  • 确认 Docker 配置中是否设置了自定义 registry mirror(如 mirrors.xxx.com),若有可临时移除。

解决步骤

  1. (可优先尝试) 使用 --build-arg NEED_MIRROR=0 禁用镜像源,改用默认 Ubuntu 仓库:
    docker build --build-arg LIGHTEN=1 --build-arg NEED_MIRROR=0 -f Dockerfile -t infiniflow/ragflow:nightly-slim .
  2. 如果上述方法无效,改用 Docker Buildx 命令构建(已在其他用户中解决 SSL/包安装问题):
    docker buildx build --platform linux/arm64 --build-arg LIGHTEN=1 -f Dockerfile -t infiniflow/ragflow:nightly-slim --load .
  3. 检查并重置 Docker 的 registry mirror 为默认设置:在 Docker Desktop → Settings → Docker Engine 中,确保 registry-mirrors 字段为空或仅保留官方源。
  4. 若以上步骤均失败,尝试修改本地 Dockerfile,将 apt install -y default-jdk 替换为 apt install -y openjdk-8-jre(某些 ARM64 用户反馈有效),然后重新构建。
  5. 检查本地网络是否阻止了对 ports.ubuntu.com 的外部连接,暂时关闭 VPN 或代理后重试。

验证方法

构建完成后,运行 docker images 确认 infiniflow/ragflow:nightly-slim 镜像存在。随后启动容器 docker run -d --name ragflow-test infiniflow/ragflow:nightly-slim,检查日志确认服务正常启动(无 aptOpenJDK 相关错误)。

参考来源

infiniflow/ragflow #10073

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 16180

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注