代码之家  ›  专栏  ›  技术社区  ›  logi0517

Docker Build找不到用于复制命令的源文件夹

  •  0
  • logi0517  · 技术社区  · 6 年前

    我有一个多模块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上。

    1 回复  |  直到 6 年前
        1
  •  1
  •   StephaneM    6 年前

    当您运行命令时

    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_b 将包含在生成上下文中。