macOS环境下Docker构建随机出现「Hash Sum mismatch」错误的排查求助
macOS环境下Docker构建随机出现「Hash Sum mismatch」错误的排查求助
大家好,我在M2芯片的Mac上构建Docker镜像时遇到了一个非常头疼的问题——每次执行到apt-get install步骤都会随机失败,要么报Hash Sum mismatch,要么说文件大小不符合预期,而且每次失败的具体包都不一样。同一个Dockerfile同事用着完全正常,CI/CD也能顺利跑通,就我本地各种踩坑,想请教下有没有遇到过类似情况的朋友,或者有什么新的排查方向可以试试?
相关Dockerfile片段
FROM node:22-slim RUN corepack enable pnpm RUN apt-get update && apt-get install -y \ curl \ python3 \ python3-pip \ build-essential \ libcairo2-dev \ libpango1.0-dev \ libjpeg-dev \ libgif-dev \ librsvg2-dev \ libpixman-1-dev \ libffi-dev \ libnss3 \ libatk-bridge2.0-0 \ libdrm2 \ libgtk-3-0 \ libgbm1 \ && rm -rf /var/lib/apt/lists/* WORKDIR /app
错误表现
每次构建失败的包都不固定,比如某次是libasan8的哈希校验失败,某次又是curl的文件大小异常,典型错误信息如下:
E: Failed to fetch http://deb.debian.org/debian/pool/main/g/gcc-14/libasan8_14.2.0-19_arm64.deb Hash Sum mismatch E: Failed to fetch http://deb.debian.org/debian/pool/main/c/curl/curl_8.14.1-2_arm64.deb File has unexpected size (...)
我已经试过的排查方法
网络与镜像源相关
- 换了N个Debian官方镜像源:
deb.debian.org、ftp.de.debian.org、ftp.hu.debian.org、mirrors.kernel.org、cloudfront.debian.net,全没用 - 给apt配置了重试参数
Acquire::Retries,关闭了缓存,还分别单独测试了IPv4和IPv6 - 切换过不同网络:家里WiFi、手机热点都试过,问题依旧
- 开启了NordVPN,结果还是一样报错
- 用同一个网络在Linux服务器上构建,完全没有问题
- 尝试过HTTPS源,但必须先安装
ca-certificates才能正常使用,这是目前唯一能成功的方法,但我不想修改Dockerfile
Docker环境相关
- 删除了自定义DNS配置,完全重置了Docker Desktop
- 试过三种Docker环境:Docker Desktop、Colima、Docker-in-Docker,全部中招
- 在
daemon.json里手动指定DNS为1.1.1.1和8.8.8.8,没有任何变化
主机层面检查
- 确认容器的外部IP和主机一致(VPN也正常生效)
- 关闭了系统防火墙和所有第三方网络过滤软件
目前唯一可行但不想用的方案
只有把Debian源切换为HTTPS能稳定构建成功,但需要在Dockerfile里先安装ca-certificates再替换源地址:
RUN apt-get update && apt-get install -y ca-certificates && \ sed -i 's|http://deb.debian.org|https://deb.debian.org|g' /etc/apt/sources.list.d/debian.sources
但这个Dockerfile不是我完全负责维护的,不想随便修改内容。
我的环境信息
- 主机系统:macOS Tahoe 26.x(Apple Silicon M2)
- Docker工具:Docker Desktop 4.x(同时也测试了Colima)
- 基础镜像:node:22-slim(Debian Bookworm/Trixie,同样的问题在
python:3.13-slim镜像上也会出现)
疑问
现在我怀疑是Mac主机层面的HTTP流量被缓存或者篡改了?毕竟用HTTPS就完全没问题,可能和系统的透明HTTP缓存、Docker的网络代理、Mac的网络扩展或者DNS有关?有没有大佬能指点下下一步该排查什么?




