2017-04-20 338 views
0

我正在使用Java编写微服务。最后,我运行maven build来生成基于目录[project-root]/docker中的Dockerfile的Docker镜像。有些文件需要复制到Docker镜像中。因此我在我的Dockerfile下列行:如何使用docker maven插件将文件从绝对路径复制到docker镜像

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

变量workdir.nameresource.dir在pom.xml中

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

定义虽然第一拷贝命令使用相对路径这相当于target/docker/javarun,第二个命令使用绝对路径。

原来第一COPY作品,而我第二COPY称目录中找不到了错误:

[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] 

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

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

编辑最初以为这是一个Windows路径问题,所以试图在Linux上构建它,并得到相同的错误。

根据this post,src路径应该是构建上下文的相对路径。这就是为什么绝对路径不起作用。但码头构建的默认PATH是什么?它是否与Dockerfile所在的目录相同?

+0

什么时候在你的Dockerfile中创建/ etc/hadoop? – user2915097

+0

@ user2915097它将mdouchement/hdfs作为基础映像,该部分在帖子中被忽略。 – ddd

回答

0

您是否尝试过声明第二个变量为:

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

随着基本目录。

+0

更改为'basedir'(Dir不起作用),仍然出现相同的错误。根据[this](https://github.com/cko/predefined_maven_properties/blob/master/README.md),'basedir'已被弃用。 – ddd

+0

$ {basedir}已被弃用,但$ {project.basedir}不是。 – MinMiguelM

+0

我确实尝试过'project.basedir',但仍然一样。我注意到''basedir'的一个区别是它打印出类似windows的路径'步骤3/3:COPY C:\\ Users \\ H184870 \\ Workspace \\ core \\ com.lgc.dist.core.msp。 service.hdfs/src/main/resources/etc/hadoop' – ddd

相关问题