Ond*_*žka 5 docker docker-volume jenkins-pipeline docker-in-docker
我在Docker中运行Docker(专门用于运行Jenkins,然后运行Docker构建器容器来构建项目映像,然后运行这些,然后运行测试容器).
这就是jenkins图像的构建和启动方式:
docker build --tag bb/ci-jenkins .
mkdir $PWD/volumes/
docker run -d --network=host \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v $PWD/volumes/jenkins_home:/var/jenkins_home \
--name ci-jenkins bb/ci-jenkins
Run Code Online (Sandbox Code Playgroud)
詹金斯工作正常.但是有一个Jenkinsfile基础的工作,运行这个:
docker run -i --rm -v /var/jenkins_home/workspace/forkMV_jenkins-VOLTRON-3057-KQXKVJNXOU4DGSUG3P27IR3QEDHJ6K7HPDEZYN7W6HCOTCH3QO3Q:/tmp/build collab/collab-services-api-mvn-builder:2a074614 mvn -B -T 2C install
Run Code Online (Sandbox Code Playgroud)
最终会出现错误:
您指定的目标需要执行项目,但此目录中没有POM(/ tmp/build).
当我docker exec -it sh对容器做的时候,它/tmp/build是空的.但是当我在Jenkins容器中时,路径/var/jenkins_home/...QO3Q/存在并且它包含工作区,其中所有文件都已签出并准备好.
所以我想知道 - Docker如何快乐地安装音量然后它是空的?*
更令人困惑的是,这个设置适用于Mac上的同事.我在Linux上,Ubuntu 17.10,Docker最新.
Ond*_*žka 15
一些研究,冷静下来,思考后,我意识到,泊坞窗功能于码头工人是不是真的那么多"-in-",不如说是相当"泊坞窗,下一个到码头工人".
使容器能够运行另一个容器的技巧是/var/run/docker.sock通过卷共享:-v /var/run/docker.sock:/var/run/docker.sock
然后docker容器中的客户端实际上在主机上调用Docker.
卷源路径(左侧:)不是指中间容器,而是指主机文件系统!
在意识到这一点之后,修复是workspace在主机文件系统和Jenkins(中)容器中使Jenkins 目录的路径相同:
docker run -d --network=host \
...
-v /var/jenkins_home:/var/jenkins_home
Run Code Online (Sandbox Code Playgroud)
瞧!有用.(我创建了一个符号链接,而不是移动它,似乎也工作.)
如果你正在看同事的Mac,这有点复杂,因为Docker的实现有点不同 - 它在基于Alpine Linux的VM中运行,但假装没有.(不是100%肯定.)在Windows上,我读到路径有另一层抽象 - 映射C:/somewhere/...到类似Linux的路径.
我希望我能节省一些时间来搞清楚:)
| 归档时间: |
|
| 查看次数: |
3390 次 |
| 最近记录: |