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

时间:2017-03-22 08:15:53

标签: docker jenkins continuous-integration

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

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

我的管道看起来像这样:

  1. 从github拉来源
  2. 构建项目图像
  3. 运行项目容器
  4. 我现在所做的是使用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容器安装它。

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

3 个答案:

答案 0 :(得分:3)

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

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

这不是推荐的方式,explanations在此处。如果仍然需要使用这种方法,那么这个问题就不成问题了。

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

假设,我们需要在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. 如果您的Jenkins使用主机卷运行,则可以将主机目录映射到目标容器。
  2. 否则,您可以访问新创建的容器中与 Jenkins容器相同位置的文件。

答案 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。