Prhub

#24407 [AMD] fix(docker): unbreak nightly when archive.ubuntu.com:80 is unreachable

原始 PR 作者 yctseng0211 合并时间 2026-05-05 15:39 文件变更 4 提交数 1 评论 1 代码增减 +35 / -3

执行摘要

修复 AMD Docker 构建因镜像不可达失败的问题

Release Docker Images Nightly ROCm7.2 (AMD) 构建在 TileLang 阶段失败,原因是 amd-docker-scale 运行器无法到达 Canonical 的 archive.ubuntu.com 镜像 IP 的端口 80。PR body 中详细列出了错误日志,显示所有 8 个 archive.ubuntu.com IP 均超时,导致 llvm-18 依赖包无法安装。

该 PR 是典型的基础设施修复,变更清晰、范围有限,适合快速合入。建议阅读 docker/rocm.Dockerfile 中的实现,了解如何在 Dockerfile 中优雅地处理源替换和 apt 网络硬化。

讨论亮点

未发现实质性讨论,仅有 HaiShaw 的两次批准,且 PR 已有 amd 标签。

实现拆解

  1. Dockerfile 修改(docker/rocm.Dockerfile):添加可选的 UBUNTU_MIRROR 构建参数,默认值为空字符串(不影响本地构建)。当该参数非空时,通过 sed/etc/apt/sources.list 中所有 http://*archive.ubuntu.comhttp://*security.ubuntu.com 的 URL 替换为指定的镜像地址。同时创建 apt 配置文件 /etc/apt/apt.conf.d/80-net-hardening,设置重试次数为 5、HTTP/HTTPS 超时为 30 秒,防止因瞬时网络波动导致构建失败。
  2. 工作流修改(3 个 YAML 文件):在三个 AMD 相关工作流中,向 docker build 命令添加 --build-arg UBUNTU_MIRROR=https://archive.ubuntu.com 参数:
    • .github/workflows/release-docker-amd-rocm720-nightly.yml:在两个构建步骤中分别添加。
    • .github/workflows/release-docker-amd-nightly.yml:在一个构建步骤中添加。
    • .github/workflows/release-docker-amd.yml:在一个构建步骤中添加。
  3. 配置覆盖说明:PR 注释说明该模式已与 NVIDIA Dockerfile 和 NPU Dockerfile 保持一致,确保 CI 运行器即使无法访问 Canonical 的端口 80 镜像 IP 也能完成 apt-get update
文件 模块 状态 重要度
docker/rocm.Dockerfile Dockerfile modified 4.07
.github/workflows/release-docker-amd-rocm720-nightly.yml CI 工作流 modified 3.13
.github/workflows/release-docker-amd-nightly.yml CI 工作流 modified 2.96
.github/workflows/release-docker-amd.yml CI 工作流 modified 2.96

关键源码片段

docker/rocm.Dockerfile infrastructure

核心变更文件,引入 `UBUNTU_MIRROR` 构建参数和 apt 网络硬化配置,使镜像源替换成为可能。

# docker/rocm.Dockerfile# Optional Ubuntu mirror override + apt hardening.
# UBUNTU_MIRROR is empty by default (no behaviour change for local builds).
# When set (typically in CI), all http://*archive.ubuntu.com and
# http://*security.ubuntu.com entries in /etc/apt/sources.list are rewritten
# to point at the given base URL.
ARG UBUNTU_MIRROR=USER root
RUN if [ -n "$UBUNTU_MIRROR" ]; then \
    sed -i "s|http://[^[:space:]/]*archive.ubuntu.com|$UBUNTU_MIRROR|g" /etc/apt/sources.list && \
    sed -i "s|http://[^[:space:]/]*security.ubuntu.com|$UBUNTU_MIRROR|g" /etc/apt/sources.list; \
    fi && \
    printf 'Acquire::Retries "5";\nAcquire::http::Timeout "30";\nAcquire::https::Timeout "30";\n' \
    > /etc/apt/apt.conf.d/80-net-hardening

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险极低。变更仅限于基础设施配置,不涉及任何运行时逻辑。镜像替换逻辑仅在 UBUNTU_MIRROR 非空时触发,不影响本地构建。apt 超时配置为增量添加,不会破坏现有行为。若镜像地址不可用或存在兼容性问题(如某些包只能从原始源获取),可能导致构建失败,但原始源本身已不可达,因此该风险可接受。

直接影响 AMD Docker 镜像的持续构建和发布。修复后,夜间构建应能成功完成,避免因网络问题阻塞流水线。对用户无直接影响。对团队而言,减少了因基础设施中断导致的构建失败和人工干预成本。影响范围仅限于 AMD 相关 Docker 流水线。

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论