Windows环境远程Docker部署Quarkus JVM应用失败,如何修复?
问题场景
Windows环境下,已通过Maven JVM完成Quarkus应用打包,配置好IDEA的Docker镜像设置,但执行部署时失败。
Dockerfile内容
FROM registry.access.redhat.com/ubi8/openjdk-17:1.11 ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' # We make four distinct layers so if there are application changes the library layers can be re-used COPY --chown=185 target/quarkus-app/lib/ /deployments/lib/ COPY --chown=185 target/quarkus-app/*.jar /deployments/ COPY --chown=185 target/quarkus-app/app/ /deployments/app/ COPY --chown=185 target/quarkus-app/quarkus/ /deployments/quarkus/ EXPOSE 8080 USER 185 ENV AB_JOLOKIA_OFF="" ENV JAVA_OPTS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager" ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"
错误信息
Error response from daemon: COPY failed: file not found in build context or excluded by .dockerignore: stat target/quarkus-app/lib/: file does not exist Failed to deploy 'bigquarkus Dockerfile: src/main/docker/Dockerfile.jvm': Can't retrieve image ID from build stream
解决方案
错误核心是Docker构建上下文无法找到指定的target/quarkus-app/lib/目录,可按以下步骤排查修复:
修正Docker构建上下文路径
你的Dockerfile位于src/main/docker/,而target目录在项目根目录下。如果IDEA中Docker构建的上下文设为Dockerfile所在目录,Docker会在该目录下查找target,自然找不到。需在IDEA的Docker部署配置中,将**构建上下文(Context folder)**设置为Quarkus项目的根目录(即包含pom.xml和target的目录)。确认Maven打包产物完整性
重新执行mvn clean package命令,确保打包过程无报错,然后检查项目根目录下的target/quarkus-app目录,确认其中存在lib/、app/、quarkus/文件夹及quarkus-run.jar文件。检查.dockerignore规则
查看项目根目录下的.dockerignore文件,如果存在target/这类排除规则,会导致Docker构建时忽略整个target目录,需注释或删除该规则。调整Dockerfile路径(可选)
若不想修改构建上下文,可将Dockerfile中的COPY路径改为基于Dockerfile所在目录的相对路径,比如../../target/quarkus-app/lib/,但这种方式易因目录结构变化出错,不推荐。
内容的提问来源于stack exchange,提问作者vergil

