修复failed to solve: process “/bin/sh -c 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” did not complete successfully: exit code: 2

错误原因分析

报错 sed: can't read /etc/apt/sources.list: No such file or directory 的根本原因是:

Docker 的 python:3.9 基础镜像最近升级了底层操作系统,从 Debian 11 (Bullseye) 升级到了 Debian 12 (Bookworm)。

在 Debian 12 中,APT 源的配置文件路径发生了变化:

  • 旧路径/etc/apt/sources.list (文件不存在了,所以报错)
  • 新路径/etc/apt/sources.list.d/debian.sources

解决方案

我们需要修改 Dockerfile 中的换源命令,让它指向正确的新文件路径。

请使用下方修正后的 Dockerfile(我已将 sed 命令的目标文件改为新路径,并保留了 OpenCV 所需的系统库):Dockerfile

FROM python:3.9

# 设置工作目录
WORKDIR /app

# 设置时区为上海
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# --- 核心修改点开始 ---
# 适配 Debian 12 (Bookworm) 的换源方式
# 新版镜像源文件位于 /etc/apt/sources.list.d/debian.sources
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources

# 安装 OpenCV 和 PaddleOCR 必须的系统依赖
# libgl1: 解决 libGL.so.1 错误
# libglib2.0-0: 解决 libgthread 等相关错误
RUN apt-get update && apt-get install -y \
    libgl1 \
    libglib2.0-0 \
    libsm6 \
    libxrender1 \
    libxext6 \
    && rm -rf /var/lib/apt/lists/*
# --- 核心修改点结束 ---

# 复制依赖文件
COPY requirements.txt .

# 安装 Python 依赖
# 使用阿里云 PyPI 镜像加速
RUN pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

# 复制项目代码
COPY . .

# 创建必要的目录
RUN mkdir -p uploads user_profile_mock

# 暴露端口
EXPOSE 5000

# 启动命令
CMD ["python", "main.py"]

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627

发表评论

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