在您的第一种情况下,您build
从builders
目录运行,但传递给 Docker 的上下文不包含(它包含根据指令pom.xml
在当前目录中的内容)docker-compose
context: .
在您的第二种情况下,up
将安装您的项目目录app
:
volumes:
- ~/dockerbuildtest/:/app/
这意味着~/dockerbuildtest/pom.xml
它将在容器中显示为/app/pom.xml
. mvn
从app
现在开始运行。
为什么第一个构建失败但没有 pom.xml 错误,尽管它已经存在
它不存在:在第一次构建中,没有pom.xml
复制到您的图像中(请参阅COPY
说明)。
您可以通过从项目的根目录运行构建命令并指定 Dockerfile 来确保您的上下文包含pom.xml
,例如:
build:
# will use current directory as build context
# by running from your project's root dir, context will contain pom.xml
context: .
# path to Dockerfile is relative to where build command is run
dockerfile: builders/Dockerfile
并将您的复制pom.xml
到您的 Dockerfile 中,例如:
# [...]
WORKDIR /app
# copy pom.xml from context into image
COPY pom.xml /app/pom.xml
# run from /app directory which now contains a pom.xml, should work
RUN mvn clean package