You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Docker化Apache Commons Daemons Maven项目时构建报错:无法计算缓存密钥

Docker化Apache Commons Daemons Maven项目时构建报错:无法计算缓存密钥

嗨,我来帮你分析下这个问题哈!你遇到的这个Docker构建报错,核心原因就是Docker找不到你要添加的target/simple-docker.jar文件,下面给你拆解几个常见原因和对应的解决办法:

1. 先确认Maven构建的jar包信息与构建上下文

  • 首先,在项目根目录执行mvn clean install后,打开target目录看看:生成的jar包名字是不是simple-docker.jar?很多时候Maven默认生成的jar包名是和项目名绑定的(比如带版本号的项目名格式,像commons-daemons-1.2.4.jar),如果和你Dockerfile里写的名字对不上,自然会找不到文件。
  • 另外,一定要确保你是在项目根目录执行docker build .命令!Docker的构建上下文是你执行命令时的当前目录,要是你跑到子目录或者其他路径执行构建,Docker根本看不到项目根下的target文件夹。

2. 检查多阶段构建的产物传递是否正确

看你贴的Dockerfile片段,应该是用了多阶段构建(前面有Maven构建的阶段,后面是OpenJDK运行阶段),但你直接用ADD target/simple-docker.jar是错的——多阶段构建的不同阶段是独立的文件系统,第一阶段Maven构建出来的jar包不会自动出现在第二阶段。

给你一个规范的多阶段构建示例,你可以参考调整:

# 第一阶段:使用Maven镜像完成项目构建
FROM maven:3.8.6-openjdk-8 AS builder
WORKDIR /app
# 复制pom.xml和源码到构建环境
COPY pom.xml .
COPY src ./src
# 执行Maven构建,跳过测试加速构建
RUN mvn clean install -DskipTests

# 第二阶段:基于OpenJDK镜像运行jar包
FROM openjdk:8
WORKDIR /app
# 从第一阶段的builder容器中复制构建好的jar包到当前容器
COPY --from=builder /app/target/你的实际jar包名称.jar simple-docker.jar
# 启动命令
ENTRYPOINT ["java", "-jar", "simple-docker.jar"]
EXPOSE 8080

3. 排查是否有配置文件忽略了target目录

检查项目根目录下的.dockerignore文件,如果里面写了target/,Docker在构建时会直接忽略这个目录,自然找不到里面的jar包。要是有这条规则,要么删掉它,要么把jar包的路径调整到不被忽略的目录里。

最后给你个快速验证的小步骤:在项目根目录执行ls target,把输出的真实jar包名字记下来,对应修改Dockerfile里的文件名称,然后重新执行mvn clean install && docker build -t commons-daemons-demo .试试,应该就能解决问题啦!

备注:内容来源于stack exchange,提问作者Game Wame

火山引擎 最新活动