Mac M1 Pro平台Docker构建时apt-get install报Unexpected end of file错误
解决M1 Pro上Docker构建apt-get下载EOF错误的方案
1. 替换国内Debian镜像源
原官方源deb.debian.org在部分网络环境下下载不稳定,容易出现截断导致EOF错误。直接在Dockerfile里替换为国内镜像(比如阿里云):
FROM python:3.8-slim # 替换Debian官方源为阿里云镜像 RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \ sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list RUN apt-get update && apt-get -y upgrade && \ apt-get -yqq install gcc && \ # 清理缓存,减少镜像体积 apt-get clean && rm -rf /var/lib/apt/lists/*
2. 强制使用IPv4访问源
部分网络的IPv6链路不稳定,导致下载中断。给apt添加强制IPv4的配置:
FROM python:3.8-slim # 强制apt使用IPv4 RUN echo 'Acquire::ForceIPv4 "true";' > /etc/apt/apt.conf.d/99force-ipv4 RUN apt-get update && apt-get -y upgrade && \ apt-get -yqq install gcc && \ apt-get clean && rm -rf /var/lib/apt/lists/*
3. 给apt操作添加重试机制
单次网络波动可能导致下载失败,给apt的update、upgrade、install命令添加重试参数:
FROM python:3.8-slim # 给apt操作增加重试次数,避免单次网络失败 RUN apt-get update -o Acquire::Retries=3 && \ apt-get -y upgrade -o Acquire::Retries=3 && \ apt-get -yqq install gcc -o Acquire::Retries=3 && \ apt-get clean && rm -rf /var/lib/apt/lists/*
4. 指定Debian具体版本的源分支
python:3.8-slim对应Debian bullseye版本,直接写入该版本的稳定源,避免源索引同步问题:
FROM python:3.8-slim # 写入bullseye版本的阿里云源 RUN echo "deb http://mirrors.aliyun.com/debian bullseye main contrib non-free" > /etc/apt/sources.list && \ echo "deb http://mirrors.aliyun.com/debian bullseye-updates main contrib non-free" >> /etc/apt/sources.list && \ echo "deb http://mirrors.aliyun.com/debian-security bullseye-security main contrib non-free" >> /etc/apt/sources.list RUN apt-get update && apt-get -y upgrade && \ apt-get -yqq install gcc && \ apt-get clean && rm -rf /var/lib/apt/lists/*
内容的提问来源于stack exchange,提问作者Abhishek Gupta
相关产品推荐
相关产品推荐

