You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker化Django应用执行apk update报错求助

解决Docker构建Alpine 3.15镜像时的源访问失败问题

问题原因

Alpine Linux 3.15属于已停止维护的旧版本,官方已将该版本的包索引从主源dl-cdn.alpinelinux.org迁移到归档服务器,导致构建时无法获取APKINDEX文件,触发"temporary error (try again later)"和"No such file or directory"错误。


解决方案

方案1:切换到受支持的Alpine版本(推荐)

直接更换基础镜像为仍在维护的Alpine版本,比如匹配Python 3.10的alpine3.18,也可以使用更精简的slim镜像(非Alpine但源稳定、体积可控)。

修改后的Dockerfile示例:

# 使用受支持的Alpine版本
FROM python:3.10.4-alpine3.18

ENV PYTHONUNBUFFERED=1

WORKDIR /app

RUN  apk update \
    && apk add --no-cache gcc musl-dev postgresql-dev python3-dev libffi-dev \
    && pip install --upgrade pip

COPY ./requirements.txt ./

RUN pip install -r requirements.txt

COPY ./ ./

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

方案2:替换Alpine 3.15的源为归档服务器(仅当必须使用旧版本时)

如果因依赖限制必须保留Alpine 3.15,需要先将APK源替换为归档地址:

修改Dockerfile中的RUN apk update命令段:

RUN echo "http://archive.alpinelinux.org/alpine/v3.15/main" > /etc/apk/repositories \
    && echo "http://archive.alpinelinux.org/alpine/v3.15/community" >> /etc/apk/repositories \
    && apk update \
    && apk add --no-cache gcc musl-dev postgresql-dev python3-dev libffi-dev \
    && pip install --upgrade pip

额外优化建议

如果你的Django应用不需要编译依赖(比如仅使用纯Python包),可以用多阶段构建,在构建阶段安装编译工具,最终镜像只保留运行所需依赖,大幅减小体积:

# 构建阶段
FROM python:3.10.4-alpine3.18 as builder

WORKDIR /app

RUN apk update && apk add --no-cache gcc musl-dev postgresql-dev python3-dev libffi-dev
COPY requirements.txt .
RUN pip install --user -r requirements.txt

# 运行阶段
FROM python:3.10.4-alpine3.18

ENV PYTHONUNBUFFERED=1
WORKDIR /app

COPY --from=builder /root/.local/lib/python3.10/site-packages /usr/local/lib/python3.10/site-packages
COPY ./ ./

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

内容的提问来源于stack exchange,提问作者Carlos S. C.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 04:40:41