Docker构建无法找到COPY命令的源文件夹

时间:2018-07-17 12:35:17

标签: java maven docker dockerfile docker-build

我有一个多模块maven项目,并且我想为每个模块创建和发布映像,但公用的实用程序模块除外,该模块是所有其他模块的依赖项。

项目结构如下:

project_root
 common_module
    -pom.xml
 module_a
    -pom.xml
    -Dockerfile
 module_b
    -pom.xml
    -Dockerfile
 -pom.xml
 -docker-compose.yml

要构建module_a fox示例,我也需要将common_module文件夹也复制到容器,并首先在common文件夹上运行mvn install。如果已构建,我也可以在module_a mvn install上运行pom.xml

我是Docker的新手,根据documentation of the COPY command的说法,这是我一直在尝试的工作,我认为这应该起作用:

  

可以指定多个src资源,但是文件和目录的路径将被解释为相对于构建上下文的源。

我在module_a中具有以下Dockerfile:

FROM openjdk:8-jre-alpine

# Install Maven
# (skipped for brevity)

# Create the project root
RUN mkdir -p /usr/src/project_root
WORKDIR /usr/src/project_root

# Copy all the necessary files for the packaging
# Copy the common module
COPY common_module /usr/src/project_root/common_module 
# Copy the service registry module (src + config folder)
COPY module_a /usr/src/project_root/module_a 

# Run maven install
RUN cd common_module 
RUN mvn clean install

RUN cd ../module_a 
RUN mvn clean install

然后从project_root文件夹中发出此命令(使其成为构建的上下文?):

docker build -t image_name:4.0 ./module_a

在第一个COPY命令中构建失败,并指出:

复制失败:stat / var / lib / docker / tmp / docker-builder380120612 / common_module:没有此类文件或目录

我什至不确定RUN命令是否会起作用,因为在此之前构建会失败。

我在做什么错? 如何在Dockerfile位置之外复制一个文件夹/文件?

通过我在Windows 10 Pro上运行Docker版本18.03.1-ce的方式构建9ee9f40。

1 个答案:

答案 0 :(得分:1)

运行命令时

docker build -t image_name:4.0 ./module_a

您将构建上下文定义为module_a目录。然后,您尝试将COPY目录common_module放入您的容器中,但这是不可能的,因为它不在构建上下文中。

改为使用以下命令:

docker build -t image_name:4.0 -f ./module_a/Dockerfile .

这样module_acommon_modulemodule_b将包含在构建上下文中。