如何使用jenkins docker容器安装docker卷?

Zho*_*ndr 12 continuous-integration jenkins docker

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

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

我的管道看起来像这样:

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

我现在做的是使用jenkins容器的主机docker socket:

/var/run/docker.sock:/var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)

当jenkins容器将带有/ var/jenkins_home/workspace/BRANCH_NAME的源代码的卷挂载到项目容器时,我遇到问题:

volumes:
 - ./servers/identity/app:/srv/app
Run Code Online (Sandbox Code Playgroud)

我在项目容器中获取空文件夹"/ srv/app"

我最好的猜测是,docker试图从主机而不是jenkins容器安装它.

所以问题是:我如何明确设置容器从哪个装载卷?

Eni*_*nix 6

使用Jenkins docker容器运行另一个容器时遇到相同的问题。

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

这不是推荐的方式,在这里进行解释。如果仍然需要使用这种方法,那么这个问题就不成问题了。

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

假设我们需要在Jenkins docker容器内运行另一个容器(ContainerA),docker管道插件将用于--volumes-fromJenkins容器卷安装到ContainerA

如果尝试使用Jenkins容器中的特定目录--volume-v将其映射到ContainerA,则会出现意外情况。

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

简而言之,我们无法将特定目录从containerA映射到containerB,只能将整个卷从containerA装载到containerB,并且不支持卷别名

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


iti*_*iic 4

尝试:

docker run -d --volumes-from <ContainerID> <YourImage>
Run Code Online (Sandbox Code Playgroud)

其中容器 ID 是您想要从中获取 mont 数据的容器的 ID。

您还可以通过以下方式创建卷:

docker volume create <volname>
Run Code Online (Sandbox Code Playgroud)

并将其分配给两个容器

volumes:
 - <volname>:/srv/app
Run Code Online (Sandbox Code Playgroud)