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

GitLab CI容器内测试异常:脚本未运行于Docker环境

问题:GitLab CI指定image后脚本未运行在Docker容器内?

我原本在GitLab CI里执行测试任务时,是先构建Docker镜像,再在脚本里启动容器运行测试。后来发现可以直接通过image参数指定镜像来启动测试,但运行cat /proc/1/cgroup查看后,发现脚本根本没实际跑在Docker容器环境里。

我的CI配置如下:

test_end_to_end:
  stage: test
  image: my-image
  tags:
    - end-to-end-ci
  script:
    - cat /proc/1/cgroup

问题分析与解决思路

这种情况大概率是你指定的end-to-end-ci标签对应的GitLab Runner用的是Shell执行器(shell executor),而不是Docker执行器。

Shell执行器的工作方式是直接在Runner所在的主机系统上执行脚本,完全不会启动Docker容器——哪怕你在job里配置了image参数,这个参数在Shell执行器下是被忽略的。这时候/proc/1/cgroup显示的自然是主机系统的cgroup信息,而非容器的。

具体排查与解决步骤

  • 检查Runner的执行器类型
    登录GitLab找到对应Runner的详情页面,就能看到它的执行器类型;或者直接登录Runner所在主机,查看/etc/gitlab-runner/config.toml文件,找到对应Runner配置段里的executor字段,看值是不是shell。

  • 切换到Docker执行器
    如果可以修改现有Runner配置,把executor改成docker(或者docker+machine,适合需要动态扩容的场景),同时确保Runner主机已经正确安装并配置了Docker环境;如果不能修改现有Runner,就新增一个用Docker执行器的Runner,给它打上end-to-end-ci标签,让测试job调度到这个新Runner上。

  • 验证修复效果
    修改完成后重新触发测试job,再查看/proc/1/cgroup的输出,应该能看到包含Docker容器ID的cgroup路径,这就说明脚本已经在指定的my-image容器里运行了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:02:41