如何修改Podman构建镜像默认存储目录解决GitLab CI权限报错
问题根因
你环境中docker命令实际映射的是rootless模式的Podman 3.2.3,存储路径默认读取Podman的配置文件,Docker相关环境变量对Podman不生效。同时你无/home/user_1写入权限,且该路径挂载的是NFS文件系统,默认权限限制会导致pivot_root操作失败,chmod 777无法解决NFS的底层权限限制。
解决方案步骤
1. 为gitlab-runner运行用户(user_1)配置Podman存储路径
首先切换到user_1用户,创建自定义存储目录和配置文件:
# 1. 先创建你有权限的存储目录,选择/data/external下的路径即可 mkdir -p /data/external/podman/storage mkdir -p /home/user_1/.config/containers/ # 2. 编辑Podman存储配置文件 vi /home/user_1/.config/containers/storage.conf
写入以下配置,将存储路径替换为你有权限的目录:
[storage] driver = "overlay" runroot = "/run/user/$(id -u user_1)/containers" graphroot = "/data/external/podman/storage" [storage.options] mount_program = "/bin/fuse-overlayfs" [storage.options.overlay] ignore_chown_errors = "true" mountopt = "nodev,metacopy=off"
2. 验证配置生效
切换到user_1用户执行以下命令,确认存储路径已变更:
podman info | grep graphRoot
输出显示为你设置的/data/external/podman/storage即为配置生效。
3. 修正gitlab-ci.yml配置
你之前使用了sudo docker,会切换到root用户的Podman环境,和你配置的user_1的存储路径不匹配,建议去掉sudo,rootless模式的Podman无需sudo即可运行:
stages: - deploy deploy: stage: deploy script: - echo "deploying" - docker build -t my_image:v1 . - echo "********Docker Images********" - docker image list - echo "********End of Docker Images********" - docker run -d -p 3000:5000 --rm --name my_container my_image:v1 tags: - deploy
4. 重启GitLab Runner让配置生效
/usr/local/bin/gitlab-runner restart
可选:必须保留sudo调用的场景
如果你的业务场景必须使用sudo执行docker命令,需要给root用户也配置相同的存储路径,编辑/etc/containers/storage.conf,修改graphroot参数为/data/external/podman/storage即可。
内容的提问来源于stack exchange,提问作者Amin Ba
相关产品推荐
相关产品推荐

