Docker镜像python:3.12-slim为何在GitLab CI中使用旧Python版本?
问题排查:GitLab CI与开发容器python:3.12-slim版本不一致的原因及解决办法
核心原因:镜像缓存导致CI使用旧版本
python:3.12-slim属于Docker的滚动标签——标签会随着官方更新指向最新的3.12.x版本,但GitLab CI的Runner默认会复用本地已缓存的镜像。你的开发容器是近期拉取的,所以拿到了最新的3.12.3,而CI Runner还保留着之前缓存的3.12.0版本,导致版本不匹配触发Poetry报错。
解决办法:
强制CI拉取最新镜像
在.gitlab-ci.yml的对应job中添加pull_policy: always,强制每次运行CI都重新拉取最新的python:3.12-slim镜像,跳过本地缓存:build_job: image: python:3.12-slim pull_policy: always script: - python --version - poetry install清理Runner的本地镜像缓存(自托管Runner适用)
如果你的GitLab Runner是自托管的,手动清理旧的python:3.12-slim镜像:# 列出所有匹配的镜像 docker images | grep python:3.12-slim # 删除旧镜像(替换成实际的镜像ID) docker rmi abc123def456清理后再运行CI,Runner会自动拉取最新版本。
改用固定版本标签(最稳妥方案)
滚动标签虽然便捷,但容易出现环境不一致问题。直接使用具体版本的镜像标签,比如python:3.12.3-slim,让开发容器和CI完全使用同一版本:- CI配置(
.gitlab-ci.yml):image: python:3.12.3-slim - 开发容器Dockerfile:
FROM python:3.12.3-slim
- CI配置(
先验证CI中的Python版本
在CI脚本开头添加版本打印,确认问题根源:script: - python --version # 先确认版本是否正确 - poetry install
内容的提问来源于stack exchange,提问作者Samuel Young
相关产品推荐
相关产品推荐

