使用fabric8 docker-maven-plugin在远程docker守护程序上构建映像

时间:2019-05-28 15:42:02

标签: maven docker gitlab-ci docker-maven-plugin

我正在尝试使用fabric8的docker-maven-plugin在gitlab ci管道中构建docker映像。

背景:

我在gitlab-ci.yml中的图像构建阶段如下:

build_image:
  stage: build
  image: $JAVA_IMAGE
  services:
    - name: docker:dind
      alias: docker-build
  script:
    - ./mvnw docker:build
  allow_failure: true
  except: *nobuild
  tags:
    - autoscaler

我的pom有

<plugin>
    <groupId>io.fabric8</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.30.0</version>
    <configuration>
        <!-- the hostname should be the same as the service alias specified in the gitlab ci file-->
        <dockerHost>tcp://docker-build:2375</dockerHost>
        <images>
            <image>
                <name>my-image</name>
                <build>
                    <contextDir>${project.basedir}/path/where/Dockerfile/lives</contextDir>
                    <filter>false</filter>
                    <tags>
                        <tag>latest</tag>
                        <tag>${project.version}</tag>
                    </tags>
                </build>
            </image>
        </images>
    </configuration>
</plugin>

我的Dockerfile包含

COPY ./some/directory/ /destination/path/within/image

但是构建失败并显示错误

41014 [ERROR] DOCKER> Unable to build image [my-image] : "COPY failed: stat /var/lib/docker/tmp/docker-builder785340074/some/directory/: no such file or directory"  ["COPY failed: stat /var/lib/docker/tmp/docker-builder785340074/some/directory/: no such file or directory" ]

问题:

问题似乎是,从$JAVA_IMAGE构建的容器中的行家正在使用docker:dind容器的docker守护进程(位于tcp://docker-build:2375)构建my-image(如预期),但docker:dind容器无权访问$JAVA_IMAGE./some/directory/容器上的文件。有没有办法让它访问那些文件,或将那些文件复制到docker:dind容器中?还是有更好的方法来做我想做的事情(同时保持服务映像docker:dind和构建映像$JAVA_IMAGE之间的分隔)?

0 个答案:

没有答案