Jenkins Docker插件卷/挂载使用什么语法

7xllpg7q  于 2022-11-02  发布在  Jenkins
关注(0)|答案(2)|浏览(205)

我有一个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行开始),我也试着用反斜杠等,没有任何效果。
有人知道在配置面板中设置一个简单卷的语法是什么吗?

3zwtqj6y

3zwtqj6y1#

将配置更改为:
type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock
它不是卷,而是绑定类型。

disbfnqx

disbfnqx2#

这对我来说是有效的,类型=绑定,源=/sys/fs/cgroup,目标=/sys/fs/cgroup,只读

相关问题