我在jithub上运行容器和项目源代码中的jenkins。
我需要在与jenkins相同的主机上运行容器中的项目,但不是作为docker-in-docker运行,我想将它们作为兄弟容器运行。
我的管道看起来像这样:
我现在所做的是使用jenkins容器的主机docker socket:
/var/run/docker.sock:/var/run/docker.sock
当jenkins容器将包含/ var / jenkins_home / workspace / BRANCH_NAME源代码的卷挂载到项目容器时,我遇到了问题:
volumes:
- ./servers/identity/app:/srv/app
我在项目容器中获取空文件夹“/ srv / app”
我最好的猜测是,docker尝试从主机而不是jenkins容器安装它。
所以问题是:我如何明确设置容器从哪个装载卷?
答案 0 :(得分:3)
使用Jenkins docker容器运行另一个容器时,我遇到了同样的问题。
这不是推荐的方式,explanations在此处。如果仍然需要使用这种方法,那么这个问题就不成问题了。
假设,我们需要在Jenkins Docker容器内运行另一个容器( ContainerA ), docker管道插件将使用--volumes-from
来安装 Jenkins容器卷到 ContainerA 。
如果您尝试使用--volume
或-v
将 Jenkins容器中的特定目录映射到 ContainerA ,则会出现意外情况。
这是因为--volumes
或-v
会尝试将主机中的目录映射到 ContainerA ,而不是从 Jenkins内部的目录进行映射容器。如果在主机中找不到目录,则您将在 ContainerA 中获得一个空目录。
简而言之,我们无法将特定目录从containerA映射到containerB,只能将整个卷从containerA装载到containerB,然后volume alias is not supported。
答案 1 :(得分:2)
尝试:
docker volume create <volname>
其中容器ID是您想要来自mont数据的容器的id。
您还可以通过以下方式创建音量:
volumes:
- <volname>:/srv/app
并将其分配给两个容器
<ion-row class="categoryView">
<ion-col class="gridCol" width-40></ion-col>
<ion-col class="gridCol" width-40></ion-col>
</ion-row>
ion-col.gridCol.col {
height: 80px;
background: azure;
margin: 10px;
}
ion-row.categoryView.row {
height: 100px;
background: black;
}
答案 2 :(得分:2)
在Host和Jenkins之间共享袜子是我的问题因为&#34; / var / jenkins_home&#34;很可能是Jenkins容器的卷。
我的解决方案是在没有共享袜子的情况下将docker安装在systemd容器中。
docker run -d --name jenkins \
--restart=unless-stopped \
--privileged \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
-v jenkins-vol:/var/lib/jenkins \
--tmpfs /run \
--tmpfs /run/lock \
ubuntu:16.04 /sbin/init
然后安装Jenkins,Docker和Docker Compose。