Docker构建时apt-get install反复出现Hash Sum mismatch错误求助
解决基于cityflowproject/cityflow镜像构建时APT Hash Sum mismatch问题
问题重现
基于cityflowproject/cityflow基础镜像构建Docker镜像时,执行RUN apt-get update && apt-get install -y ...步骤持续触发Hash Sum mismatch错误,日志示例:
E: Failed to fetch http://deb.debian.org/debian/pool/main/.. Hash Sum mismatch
期望文件的哈希值:
- SHA256:...
接收文件的哈希值:- SHA256:...(与期望不同)
已尝试禁用APT缓存、清理列表、添加代理异常配置、使用--no-cache构建等常规手段,问题仍未解决。
针对性解决方案
1. 更换国内Debian镜像源(推荐)
官方源的同步延迟或网络波动是哈希不匹配的常见原因,替换为国内镜像可大幅降低此类问题:
修改Dockerfile,在APT操作前替换源列表:
FROM cityflowproject/cityflow # 替换为清华Debian镜像源(需匹配基础镜像的Debian版本,示例为bullseye) RUN rm -f /etc/apt/sources.list && \ echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free" > /etc/apt/sources.list && \ echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free" >> /etc/apt/sources.list && \ echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free" >> /etc/apt/sources.list && \ echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free" >> /etc/apt/sources.list # 清理并安装依赖 RUN rm -rf /var/lib/apt/lists/* && \ apt-get clean && \ apt-get update && \ apt-get install -y --no-install-recommends \ build-essential \ cmake \ git \ libboost-all-dev && \ rm -rf /var/lib/apt/lists/* # 安装Python依赖 RUN pip install numpy torch matplotlib
注:若基础镜像Debian版本不是bullseye,可先执行docker run -it cityflowproject/cityflow cat /etc/debian_version查看版本,替换对应源(如buster、bookworm)。
2. 使用宿主机网络构建
Docker默认的网络隔离可能导致代理或DNS问题,使用宿主机网络构建可规避此类干扰:
docker build --network=host -t your-custom-image .
3. 临时忽略哈希校验(不推荐,仅应急)
若需快速验证构建流程,可在apt-get install时添加参数跳过哈希校验(降低安全性,不用于生产环境):
RUN rm -rf /var/lib/apt/lists/* && \ apt-get clean && \ apt-get update && \ apt-get install -y --no-install-recommends --allow-unauthenticated \ build-essential \ cmake \ git \ libboost-all-dev && \ rm -rf /var/lib/apt/lists/*
原因说明
Hash Sum mismatch通常由以下因素导致:
- 官方Debian源的区域同步延迟,导致本地获取的包索引与实际包哈希不匹配
- 网络传输过程中丢包或代理缓存污染,导致下载的包文件损坏
- Docker网络隔离下的DNS解析异常,获取到错误的源节点
内容的提问来源于stack exchange,提问作者Kunal Kulkarni
相关产品推荐
相关产品推荐

