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

GitLab Runner [runners.docker] volumes工作原理及证书共享机制咨询

GitLab Runner [runners.docker] volumes工作原理及docker:dind证书共享机制

一、[runners.docker] volumes的通用工作原理

GitLab Runner使用Docker执行器时,[runners.docker]下的volumes配置项,作用是在Runner宿主机、任务容器(job container)以及服务容器(service container)之间共享文件或目录:

  • 当配置单纯容器内路径(如/certs/client)时,Runner会自动创建匿名卷,并同时挂载到任务容器和所有配置的服务容器中,实现多容器间的文件互通。
  • 若配置宿主机路径+容器路径的格式(如/host/path:/container/path),则是将宿主机的指定路径直接挂载到容器内,可实现宿主机与容器、多容器之间的共享。

二、docker:dind与任务容器的/certs/client共享机制

你配置的Runner中,服务容器为docker:20.10.9-dind,任务容器为docker:20.10.9,两者通过/certs/client共享证书的具体流程:

  1. dind容器自动生成证书
    docker:dind镜像启动时,内部初始化脚本会自动生成Docker TLS通信所需的整套证书,其中供客户端使用的证书会默认存放在容器内的/certs/client目录下。
  2. Runner卷挂载实现跨容器共享
    由于你在[runners.docker].volumes中配置了/certs/client,Runner会为该路径创建匿名卷,并同时挂载到:
    • docker:dind服务容器的/certs/client路径
    • 任务容器的/certs/client路径
  3. 任务容器Docker客户端使用证书
    任务容器内的Docker客户端会读取/certs/client下的证书,通过TLS安全连接到docker:dind容器的Docker守护进程(默认监听tcp://docker:2376),从而在任务中安全执行Docker命令(比如构建镜像)。

你的Runner配置示例

[[runners]]
  name = "docker-dind"
  url = "http://127.0.0.1/"
  token = "KhrzNHQc19_NME-WDgTW"
  executor = "docker"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = "docker:20.10.9"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/certs/client", "/cache"]
    shm_size = 0

    [[runners.docker.services]]
      name = "docker:20.10.9-dind"

官方注释翻译

指定Docker创建证书的位置。Docker会在启动时自动创建证书,并借助config.toml中的卷挂载,创建/certs/client以实现服务容器与任务容器之间的共享。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:05:37