Jenkins Docker 插件 volume/mount 使用什么语法

Jenkins Docker plugin volume/mount what syntax to use

我有一个 linux 虚拟机,我在上面安装了 docker。我有几个 docker 容器,其中包含我必须使用的不同程序。这是我的架构:

除了红框外,一切正常。

我想做的是动态地提供具有云功能的 jenkins docker-in-docker 代理,以便构建我的 docker 图像并将它们推送到我设置的 docker 注册表。

我一直在寻找在 docker 容器中创建 docker 的文档,我发现了这个: https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/

这篇文章指出,为了避免我的主要 docker 安装出现问题,我必须创建一个卷:

-v /var/run/docker.sock:/var/run/docker.sock

我在本地测试了我的图像,我没有问题运行

docker run -d -v --name test /var/run/docker.sock:/var/run/docker.sock

docker exec -it test /bin/bash

docker run hello-world

容器正在使用 linux vm docker 安装来构建和 运行 docker 图像所以一切都很好。

但是,当涉及到 jenkins docker 云配置时,我遇到了问题。

据我所知,自从 #826 构建以来,docker jenkins 插件更改了它的卷语法。

这是我试过的配置:

我在尝试启动代理时收到的错误消息:

Reason: Template provisioning failed.
com.github.dockerjava.api.exception.BadRequestException: {"message":"create 
/var/run/docker.sock: \"/var/run/docker.sock\" includes invalid characters for a local 
volume name, only \"[a-zA-Z0-9][a-zA-Z0-9_.-]\" are allowed. If you intended to pass a 
host directory, use absolute path"} 

我也试过那个配置:

Reason: Template provisioning failed.
com.github.dockerjava.api.exception.BadRequestException: {"message":"invalid mount config for type \"volume\": invalid mount path: './var/run/docker.sock' mount path must be absolute"}

我不明白这意味着什么,因为在我的 linux 虚拟机上,docker.sock 绝对路径是 /var/run/docker.sock,它与 docker 中的路径相同] 在 docker 我在 运行 本地...

我试图检查源代码以找出我做错了什么,但不清楚代码对我做了什么(https://github.com/jenkinsci/docker-plugin/blob/master/src/main/java/com/nirima/jenkins/plugins/docker/DockerTemplateBase.java,从第 884 行开始),我也尝试使用反斜杠等。没有成功了。

有谁知道配置面板中用于设置简单卷的预期语法是什么?

将配置更改为:

type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock

它不是卷,它是绑定类型。