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

Gitlab CI中服务容器与Runner容器如何共享卷或目录

GitLab CI 服务容器与作业容器文件共享方案

方案1:全局配置Runner实现自动卷挂载(官方原生支持)

之前在config.toml中配置volumes参数对服务容器不生效,是因为普通[runners.docker]段下的volumes配置默认仅挂载到主作业容器。GitLab Runner 14.2及以上版本已经提供了专门针对服务容器的卷挂载配置项,配置后即可实现主作业容器、所有服务容器、宿主机三者的目录共享:

  1. 打开Runner对应的config.toml配置文件
  2. 在对应Runner的docker配置段下,添加services_volumes配置:
[runners.docker]
  # 原有配置(镜像、特权模式、普通volumes等)保持不变
  # 新增服务容器专属卷配置
  [[runners.docker.services_volumes]]
    host_path = "/data/ci-shared" # 宿主机上的真实目录路径
    container_path = "/ci-shared"  # 所有容器内的统一挂载路径
    mode = "rw" # 权限配置,rw为可读写,ro为只读
  1. 重启Runner服务使配置生效
    配置生效后,同个作业下的主作业容器、所有启动的服务容器都会自动挂载该目录:服务容器生成的文件写入/ci-shared路径后,主作业容器、其他服务容器都可以直接在同路径下读取,不需要额外复制操作。

注意:宿主机上的共享目录需要提前给Runner运行用户分配读写权限,避免容器内写入时报权限拒绝错误。

方案2:无Runner配置权限时的轻量网络传输方案

如果没有权限修改Runner全局配置,可以利用GitLab CI默认的容器组网规则实现文件传输,不需要手动进入服务容器执行复制命令:

  • GitLab CI启动的主作业容器和所有服务容器默认在同一个内部桥接网络下,容器间可以直接通过网络互通
  • 作业启动时先在主作业容器后台启动一个简易HTTP文件接收服务,示例:
# 以Python为例,启动后监听8000端口,接收上传的文件存放到指定目录
python3 -m uploadserver 8000 -d /builds/output &
  • 配置服务容器(比如selenium)在生成目标文件后,直接通过HTTP请求把文件上传到主作业容器的8000端口即可,主作业容器的访问地址可以直接用作业容器的默认网络别名,不需要手动查询容器IP。

常见误区说明

之前看到的开放状态功能诉求issue均为14.2版本之前的历史讨论,目前官方已经原生支持服务容器卷挂载能力,不需要依赖docker-in-docker或者docker-compose方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:03:32