2017-04-20 328 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

相關問題