我把詹金斯装在码头集装箱里。在此文章之后,我将绑定安装Docker套接字,以便与其进行从dockerized中的交互。我还绑定挂载容器目录jenkins_home。以下是我的几本书的简要回顾:
# 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/目录下运行它,因此在主机文件系统(并挂载)中创建了以下目录:
/home/foo/bar现在,我有了一个Jenkins管道(mypipe),它运行一个带有以下卷的MySQL容器的坞-组合文件:
# 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
发布于 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路径,因此文件系统路径在每个上下文中都是相同的。
https://stackoverflow.com/questions/62678663
复制相似问题