Java 如何使用docker maven插件将文件从绝对路径复制到docker映像

Java 如何使用docker maven插件将文件从绝对路径复制到docker映像,java,maven,docker,path,dockerfile,Java,Maven,Docker,Path,Dockerfile,我正在用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 变量workdir.name

我正在用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
变量
workdir.name
resource.dir
在pom.xml中定义

<properties>
        <workdir.name>javarun</workdir.name>
        <resource.dir>${project.baseUri}/src/main/resources</resource.dir>
</properties>
打印出来的路径是
/C:/Users/H184870/Workspace/core/com.lgc.dist.core.msp.service.hdfs//src/main/resources
,看起来很奇怪。我猜这不是一个有效的Windows路径

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

EDIT最初认为这是一个windows路径问题,因此尝试在Linux上构建它,但得到了相同的错误


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

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

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

使用baseDir。

通过添加以下内容在pom中包括共享/公共资源:

<resources>
    <resource>
        <directory>/absolute/path/to/resources</directory>
        <includes>
            <include>**/*</include>
        </includes>
        <targetPath>shared</targetPath>
    </resource>
</resources>

当在Dockerfile中创建/etc/hadoop时?@user2915097将mdouchement/hdfs作为基本映像,该部分在帖子中被遗漏。更改为
basedir
(Dir不起作用),但仍会收到相同的错误。根据
basedir
已弃用。${basedir}已弃用,但${project.basedir}不是。我确实尝试过
project.basedir
,但仍然是一样的。我注意到与
basedir
的一个区别是,它打印出类似路径的窗口
步骤3/3:COPY C:\\Users\\H184870\\Workspace\\core\\com.lgc.dist.core.msp.service.hdfs/src/main/resources/etc/hadoop
<resources>
    <resource>
        <directory>/absolute/path/to/resources</directory>
        <includes>
            <include>**/*</include>
        </includes>
        <targetPath>shared</targetPath>
    </resource>
</resources>
<configuration>
    ...
    <buildArgs>
        ...
        <SHARED_RESOURCES>target/classes/shared</SHARED_RESOURCES>
    </buildArgs>
</configuration>
...
ARG SHARED_RESOURCES
COPY ${SHARED_RESOURCES}/something /target
...