如何使用docker maven插件将文件从绝对path复制到docker镜像

我正在用Java编写微服务。 最后,我运行maven build来生成基于目录[project-root] / docker中的Dockerfile的Docker镜像。 有些文件需要复制到Docker镜像中。 因此,我的Dockerfile中有以下几行:

# HDFS base image FROM mdouchement/hdfs COPY ${workdir.name} /${workdir.name} COPY ${resource.dir} /etc/hadoop 

variablesworkdir.nameresource.dir在pom.xml中定义

 <properties> <workdir.name>javarun</workdir.name> <resource.dir>${project.baseUri}/src/main/resources</resource.dir> </properties> 

当第一个复制命令使用相当于target/docker/javarun相对path时,第二个命令使用绝对path。

原来第一个COPY作品,而我得到第二个COPY错误说目录没有find:

 [INFO] Building image docker.repo.lgc.com/distarch/com.lgc.dist.core.msp.service.hdfs Step 1/3 : FROM mdouchement/hdfs ---> c95344e8749d Step 2/3 : COPY javarun /javarun ---> e2e8cb5bc21f Removing intermediate container f49da68fe77e Step 3/3 : COPY file:/C:/Users/H184870/Workspace/core/com.lgc.dist.core.msp.service.hdfs//src/main/resources /etc/hadoop [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 14.906 s [INFO] Finished at: 2017-04-20T11:07:12-05:00 [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal com.spotify:docker-maven-plugin:0.3.10:build (docker-build) on project com.lgc.dist.core.msp.service.hdfs: Exception caught: lstat file:/C:/Users/H184870/Workspace/core/com.lgc.dist.core.msp.service.hdfs//src/main/resources: no such file or directory -> [Help 1] 

打印出的path是/C:/Users/H184870/Workspace/core/com.lgc.dist.core.msp.service.hdfs//src/main/resources ,看起来很奇怪。 我的猜测是这不是一个有效的Windowspath。

我现在正在Windows机器上运行它,但构build过程最终将移到Linux服务器。 在Dockerfile中复制文件时,如何使两个操作系统的绝对path兼容?

编辑原本以为这是一个Windowspath问题,所以试图build立在Linux上,并得到了同样的错误。

根据这篇文章 ,srcpath应该是从构build上下文的相对path。 这就是为什么绝对path不起作用。 但是docker build的默认PATH是什么? 是否与Dockerfile所在的目录相同?

你有没有尝试声明第二个variables为:

 <resource.dir>${project.baseDir}/src/main/resources</resource.dir> 

用baseDir。