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共享证书的具体流程:
- dind容器自动生成证书
docker:dind镜像启动时,内部初始化脚本会自动生成Docker TLS通信所需的整套证书,其中供客户端使用的证书会默认存放在容器内的/certs/client目录下。 - Runner卷挂载实现跨容器共享
由于你在[runners.docker].volumes中配置了/certs/client,Runner会为该路径创建匿名卷,并同时挂载到:- docker:dind服务容器的
/certs/client路径 - 任务容器的
/certs/client路径
- docker:dind服务容器的
- 任务容器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
相关产品推荐
相关产品推荐

