修复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"]
