在挂载空卷的 Kubernetes 实例上使用 docker-compose



我有一个使用 Googles Jenkins on Kubernetes 解决方案的 Jenkins 实例设置。我没有更改 Kubernetes Pod 的任何设置。

当我触发一个新作业时,我能够成功地启动并运行所有内容,直到我的测试点。

我的测试使用 docker-compose。首先,我确保在实例上安装 docker (1.5-1+b1) 和 docker-compose (1.8.0-2)(我知道我可以通过使用已经包含这些的映像来优化它,但我仍然只是在概念验证中)。

当我运行docker-compose up命令时,一切正常,服务启动其初始化脚本。但是,坐骑是空的。我已经验证了这些文件存在于 Jenkins 从属服务器上,并且当我运行 docker-compose 时,挂载是在 docker 服务中创建的,但它们是空的

一些信息:

为了绕过文件权限,我使用/tmp作为 Jenkins 工作区。我正在使用 SCM 拉取我的文件(成功),并在 docker 撰写文件中指定version: '2'和具有绝对路径的挂载路径。失败的服务卷部分如下所示:

volumes:
- /tmp/automation:/opt/automation

我将服务中运行的命令更改为ls /opt/automation,结果是一个空目录。

我错过了什么?我只想将目录挂载到我的 docker 撰写服务中。这在Windows,Ubuntu和Centos设备上完美运行。为什么它不能使用 Kubernetes 实例工作?

我在这里找到了它失败的原因:

Docker 容器中的 Docker 容器

使用父主机的 Docker 守护程序,因此,在"docker-in-docker"情况下挂载的任何卷仍从主机引用,而不是从容器引用。

因此,从 Jenkins 容器挂载的实际路径在 HOST 中"不存在"。因此,在空的"docker-in-docker"容器中创建了一个新目录。当目录挂载到容器内的新 Docker 容器时,同样的事情也适用。

因此,似乎不可能将某些东西从外部 docker 安装到内部 docker 中。必须找到另一种解决方案。

最新更新