我使用Googles Jenkins on Kubernetes解决方案设置了Jenkins实例。我没有更改Kubernetes Pod的任何设置。
当我触发一份新工作时,我能够成功地完成所有工作,直到我的测试为止。
我的测试使用docker-compose。首先,我确保在实例上安装docker(1.5-1 + b1)和docker-compose(1.8.0-2)(我知道我可以通过使用已包含这些的图像来优化它,但我仍然只是验证的概念)。
当我运行docker-compose up
命令时,一切正常,服务启动其初始化脚本。但是,坐标为空。我已经验证了Jenkins slave上存在的文件,当我运行docker-compose时,mount在docker服务中创建,但是它们是空的。
一些信息:
为了绕过文件权限,我使用/tmp
作为Jenkins工作区。我正在使用SCM来拉取我的文件(成功),并在docker-compose文件中指定version: '2'
和带有绝对路径的挂载路径。失败的服务的卷部分如下所示:
volumes:
- /tmp/automation:/opt/automation
我将服务中运行的命令更改为ls /opt/automation
,结果是一个空目录。
我缺少什么? 我只想将目录安装到我的docker-compose服务中。这完全适用于Windows,Ubuntu和Centos设备。为什么使用Kubernetes实例不起作用?
答案 0 :(得分:0)
我找到了here失败的原因:
Docker容器中的Docker容器使用父HOST的Docker守护程序,因此,“docker-in-docker”案例中安装的任何卷仍然是从HOST引用的,而不是从Container引用。
因此,在主机中从Jenkins容器安装的实际路径“不存在”。因此,在“docker-in-docker”容器中创建一个新目录,该目录为空。当目录安装到Container内的新Docker容器时,同样适用。
所以看起来不可能从外部的码头工人装入内部码头工具。必须找到另一种解决方案。