我有一个多模块Maven项目,我想为每个模块创建和发布一个映像,除了一个公共的实用模块,它是所有其他模块的依赖项。
项目结构如下:
project_root
common_module
-pom.xml
module_a
-pom.xml
-Dockerfile
module_b
-pom.xml
-Dockerfile
-pom.xml
-docker-compose.yml
要构建模块,我需要将通用模块文件夹也复制到容器中,然后运行
mvn install
在公用文件夹上。如果那是造的,我可以跑
根项目上进行构建
在模块上
pom.xml
也是。
我对Docker是个新手,这就是我一直在尝试的,我认为这是可行的,根据
documentation of the COPY command
,其中说明:
可以指定多个SRC资源,但文件和目录的路径将被解释为相对于生成上下文的源。
我在模块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
我发出这个命令
从项目根文件夹
(使其成为构建的上下文?):
docker build -t image_name:4.0 ./module_a
第一次生成失败
COPY
命令,说明:
复制失败:stat/var/lib/docker/tmp/docker-builder380120612/common_module:没有这样的文件或目录
我甚至不确定
RUN
命令可以工作,因为构建在这些命令之前失败了。
我做错什么了?
如何在Dockerfile位置之外复制文件夹/文件?
顺便说一下,我运行的是Docker版本18.03.1-ce,build 9ee9f40,在Windows10 Pro上。