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

GitLab自定义Podman Runner执行CI成功后容器与Pod自动消失问题求助

问题原因
  • 核心原因:你使用的GitLab Runner Docker执行器默认开启了作业结束资源清理机制,所有作业运行过程中创建的、带有对应作业标识标签的容器、Pod资源,都会在作业完成后被Runner统一删除,哪怕你挂载了宿主机的Podman sock,创建的资源也会被识别为作业关联资源清理。
  • 次要原因1:当前CI脚本中的podman run命令末尾添加了top参数,会覆盖Dockerfile中定义的npm run start启动指令,就算容器不被删除,运行的也不是目标前端服务。
  • 次要原因2:Docker执行器默认的隔离机制,可能导致你创建的Pod被绑定到作业的网络命名空间,作业结束后命名空间销毁,连带Pod被删除。
解决方案

方案一:切换为Shell执行器(推荐)

直接让Runner的命令在宿主机上执行,完全绕过Docker执行器的清理机制,操作步骤:

  1. 重新注册Runner,修改executor类型为shell:
gitlab-runner register --non-interactive \
--name "sdx-runner" \
--url "https://gitlab.mycompany.com/" \
--registration-token "jghfcZXXqZB-xJ-hfgL" \
--executor shell \
--tag-list "sdx-runner-pod"
  1. 给gitlab-runner用户添加Podman执行权限,避免权限不足问题:
usermod -aG podman gitlab-runner
systemctl restart gitlab-runner
  1. 修改.gitlab-ci.yml中的deploy作业脚本,删掉多余的top参数,同时添加旧资源清理逻辑避免重复创建报错:
deploy:
  stage: deploy
  script:
    - cd client
    - podman build -t lm-client-dev .
    - podman pod rm -f lm-dev || true
    - podman run -d --pod new:lm-dev -p 4250:3000 lm-client-dev
  tags:
    - sdx-runner-pod

方案二:保留Docker执行器,修改配置关闭清理

如果必须使用Docker执行器,按以下步骤修改:

  1. 打开Runner配置文件/etc/gitlab-runner/config.toml,找到对应Runner的配置块,添加以下参数:
[runners.docker]
  rm = false
  cleanup_containers = false
  # 原有其他配置保持不变
  1. 修改CI脚本中的Pod/容器创建命令,添加空的作业ID标签避免被清理机制识别,同时删掉多余的top参数:
podman run -d --pod new:lm-dev -p 4250:3000 --label "gitlab-runner.job.id=" lm-client-dev
  1. 重启GitLab Runner服务生效:
systemctl restart gitlab-runner
验证方法

CI作业运行完成后,登录宿主机执行以下命令确认资源正常:

  • 查看Pod状态:podman pod ls,确认lm-dev Pod处于Running状态
  • 查看容器状态:podman ps,确认lm-client-dev容器正常运行
  • 验证服务可访问:curl http://localhost:4250,能拿到前端页面返回即正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:18:02