我正在使用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.name
和resource.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所在的目錄相同?
什麼時候在你的Dockerfile中創建/ etc/hadoop? – user2915097
@ user2915097它將mdouchement/hdfs作爲基礎映像,該部分在帖子中被忽略。 – ddd