gpt4 book ai didi

docker - 如何使用 jenkins docker 容器挂载 docker 卷?

转载 作者:IT老高 更新时间:2023-10-28 12:46:29 27 4
gpt4 key购买 nike

我在 github 上的容器和项目源代码中运行 jenkins。

我需要在与 jenkins 相同的主机上的容器中运行项目,但不是作为 docker-in-docker,我想将它们作为同级容器运行。

我的管道如下所示:

  1. 从github拉源码
  2. 构建项目镜像
  3. 运行项目容器

我现在做的是使用 jenkins 容器中主机的 docker 套接字:

/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 容器中挂载它。

所以问题是:如何显式设置我安装卷的容器?

最佳答案

我在使用 Jenkins docker 容器运行另一个容器时遇到了同样的问题。

Senario 1 - 在 Jenkins docker 容器中运行容器

这不是推荐的方式,explanations去这里。如果你还需要使用这种方式,那么这个问题就不是问题了。

Senario 2 - 在 Jenkins 容器中运行 docker 客户端

假设,我们需要在 Jenkins docker 容器中运行另一个容器 (ContainerA),docker pipeline plugin 将使用 --volumes-fromJenkins 容器卷 挂载到 ContainerA

如果您尝试使用 --volume-vJenkins 容器 中的特定目录映射到 ContainerA,你会得到一个意想不到的行为。

这是因为 --volumes-v 会尝试将 host 中的目录映射到 ContainerA,而不是比从 Jenkins 容器 内的目录映射。如果在 host 中找不到目录,那么您将在 ContainerA 中获得一个空目录。

简而言之,我们无法将特定目录从 containerA 映射到 containerB,我们只能将整个卷从 containerA 挂载到 containerB,并且 volume alias is not supported .

解决方案

  1. 如果您的 Jenkins 使用主机卷运行,您可以将主机目录映射到目标容器。
  2. 否则,您可以访问与 Jenkins 容器相同位置的新创建容器内的文件。

关于docker - 如何使用 jenkins docker 容器挂载 docker 卷?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42946067/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com