我有一个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行开始),我也试着用反斜杠等,没有任何效果。
有人知道在配置面板中设置一个简单卷的语法是什么吗?
2条答案
按热度按时间3zwtqj6y1#
将配置更改为:
type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock
它不是卷,而是绑定类型。
disbfnqx2#
这对我来说是有效的,类型=绑定,源=/sys/fs/cgroup,目标=/sys/fs/cgroup,只读