如何在GitLab CI流水线的micromamba镜像中用apt-get安装包
在GitLab CI中使用micromamba镜像安装apt包的解决方案
问题背景
之前使用continuumio/miniconda3:latest镜像时,以下GitLab CI配置可正常安装libgl1-mesa-glx:
image: continuumio/miniconda3:latest before_script: - apt-get update && apt-get install -y libgl1-mesa-glx
但切换到mambaorg/micromamba:1.1.0-bullseye镜像后,执行相同的apt-get命令时出现权限错误:
Reading package lists... E: List directory /var/lib/apt/lists/partial is missing. - Acquire (13: Permission denied)
原因分析
micromamba镜像默认以**非root用户(micromamba)**运行,而apt-get操作需要root权限,这是导致报错的核心原因。
解决方案
有两种可行的解决方式,根据实际需求选择:
方式1:在CI中以root用户运行脚本
直接在GitLab CI的job配置中指定user: root,让所有脚本以root身份执行,即可正常使用apt-get:
image: mambaorg/micromamba:1.1.0-bullseye user: root before_script: - apt-get update && apt-get install -y libgl1-mesa-glx
这种方式无需修改镜像,适合临时或单次的安装需求。
方式2:构建自定义Docker镜像
如果该镜像会被多个CI job或项目复用,建议提前将libgl1-mesa-glx安装到镜像中,避免每次CI运行都重复执行安装步骤:
- 编写Dockerfile:
FROM mambaorg/micromamba:1.1.0-bullseye # 切换到root用户执行安装 USER root RUN apt-get update && \ apt-get install -y libgl1-mesa-glx && \ # 清理apt缓存,减小镜像体积 rm -rf /var/lib/apt/lists/* # 切回默认的micromamba用户 USER micromamba
- 构建并推送镜像到GitLab容器仓库(或其他镜像仓库),之后在CI配置中使用这个自定义镜像即可。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

