首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“码头”中的Jenkins :关于管道中绑定安装的澄清

“码头”中的Jenkins :关于管道中绑定安装的澄清
EN

Stack Overflow用户
提问于 2020-07-01 14:04:26
回答 1查看 1.1K关注 0票数 1

我把詹金斯装在码头集装箱里。在此文章之后,我将绑定安装Docker套接字,以便与其进行从dockerized中的交互。我还绑定挂载容器目录jenkins_home。以下是我的几本书的简要回顾:

代码语言:javascript
复制
# Jenkins
volumes:
  - /var/run/docker.sock:/var/run/docker.sock:ro
  - /usr/local/bin/docker-compose:/usr/local/bin/docker-compose
  - ./bar:/var/jenkins_home

我在主机的/home/foo/目录下运行它,因此在主机文件系统(并挂载)中创建了以下目录:

代码语言:javascript
复制
/home/foo/bar

现在,我有了一个Jenkins管道(mypipe),它运行一个带有以下卷的MySQL容器的坞-组合文件:

代码语言:javascript
复制
# MySQL created from Jenkins
volumes:
  - ./data:/var/lib/mysql

奇怪的是,它最终会越来越多:

/var/jenkins_home/workspace/mypipe/data < /var/lib/mysql

而不是:

/home/foo/bar/workspace/mypipe/data < /var/lib/mysql

下面是一个图形简介:

搜索堆栈溢出,结果发现,它发生于:

卷源路径(左:)不引用中间容器,而是引用主机文件系统!

没关系,但我的问题是:

为什么在那儿?

我的意思是为什么.data被精确地转换为path:/var/jenkins_home/workspace/…/data,因为MySQL容器不知道路径/var/jenkins_home

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-01 15:12:12

当Docker创建绑定挂载时,它总是从主机文件系统中的绝对路径到容器文件系统中的绝对路径。

当您的docker-compose.yml命名一个相对路径时,Compose首先展开该路径,然后将其传递给Docker守护进程。在您的示例中,您试图从文件./bar绑定挂载/var/jenkins_home/workspace/mypipe/docker-compose.yml,因此Compose填充了您在调用Docker时看到的绝对路径。Compose不知道当前目录实际上是来自Docker守护进程上下文中不同路径的绑定挂载。

如果在Jenkins日志中查看像docker.inside { ... }这样的脚本化管道调用,那么将工作区目录挂载到它启动的容器内的相同路径。解决映射问题的最简单方法可能是在主机系统上使用相同的/var/jenkins_home路径,因此文件系统路径在每个上下文中都是相同的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62678663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档