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

如何基于Chainguard Python镜像成功构建运行多阶段Dockerfile

解决方案:基于Chainguard Python镜像的多阶段构建修复方案

方案一:降级Python到3.12(兼容cgi模块)

此方案直接规避Python 3.13移除cgi模块的问题,无需修改依赖版本,是最稳妥的选择。

完整Dockerfile

# 构建阶段:使用Chainguard Python 3.12开发镜像,内置uv工具
FROM cgr.dev/chainguard/python:3.12-dev AS builder

# 设置工作目录
WORKDIR /app

# 复制依赖配置文件
COPY pyproject.toml ./

# 创建虚拟环境并安装依赖
RUN uv venv /venv
RUN . /venv/bin/activate && uv pip install --no-cache-dir -e .[all]

# 运行阶段:使用轻量的Chainguard Python 3.12镜像
FROM cgr.dev/chainguard/python:3.12

# 复制构建阶段的虚拟环境
COPY --from=builder /venv /venv

# 配置环境变量,优先使用虚拟环境的依赖
ENV PATH="/venv/bin:$PATH"

# 复制应用代码
COPY . /app

# 设置工作目录
WORKDIR /app

# 启动服务(根据你的实际入口文件调整)
CMD ["python", "your_service_entrypoint.py"]

关键说明

  • 选择3.12-dev镜像作为构建环境,它包含uv工具和完整编译依赖,能处理需要编译的Python包。
  • 用uv venv创建独立虚拟环境,后续完整复制到运行镜像,避免依赖遗漏或冲突。
  • 运行阶段使用轻量版3.12镜像,大幅缩减镜像体积,同时保持与构建阶段一致的Python版本,消除运行时兼容性风险。

方案二:在Python 3.13环境下兼容cgi模块

如果必须使用Python 3.13,可通过安装兼容包+升级依赖解决问题:

完整Dockerfile

# 构建阶段:使用Chainguard Python 3.13开发镜像
FROM cgr.dev/chainguard/python:3.13-dev AS builder

WORKDIR /app

COPY pyproject.toml ./

# 先安装cgi替代包,再强制升级htmlmin到兼容版本,最后安装服务依赖
RUN uv venv /venv
RUN . /venv/bin/activate && \
    uv pip install --no-cache-dir cgi2 && \
    uv pip install --no-cache-dir -e .[all] --force-reinstall htmlmin>=0.1.13

# 运行阶段:使用轻量的Chainguard Python 3.13镜像
FROM cgr.dev/chainguard/python:3.13

COPY --from=builder /venv /venv
ENV PATH="/venv/bin:$PATH"

COPY . /app
WORKDIR /app

CMD ["python", "your_service_entrypoint.py"]

关键说明

  • cgi2是Python 3.13移除cgi模块后的官方兼容替代包,可让依赖cgi的旧代码正常运行。
  • htmlmin>=0.1.13版本已移除对cgi模块的依赖,改用新实现逻辑,强制升级可从根源解决报错。
  • 需确认你的ydata-profiling版本兼容htmlmin>=0.1.13,若存在版本冲突,需同步升级ydata-profiling至最新稳定版。

额外注意事项

  • 若使用Poetry管理依赖,可直接在pyproject.toml中指定htmlmin>=0.1.13和cgi2作为依赖,Dockerfile中无需额外添加安装命令。
  • 若构建时遇到编译依赖缺失(如部分包需要gcc),可在构建阶段临时安装:apk add gcc musl-dev(Chainguard镜像使用apk包管理器)。

内容的提问来源于stack exchange,提问作者Shihab Ullah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:18:25