使用Docker容器化Spring Boot应用时提示找不到jar文件问题求助
问题原因
- Dockerfile配置错误
- COPY指令语法错误:你当前写的
COPY ${JAR_FILE} rtv-1.jar /app表示要同时复制${JAR_FILE}匹配到的所有文件、以及当前构建上下文里的rtv-1.jar两个源到/app目录下,如果你的构建上下文里没有独立的rtv-1.jar文件,或者你原本的需求是将匹配到的jar重命名为rtv-1.jar,这个写法都不满足要求。 - ENTRYPOINT路径错误:你将jar包复制到了
/app目录下,但ENTRYPOINT中指定的jar路径是根目录下的/rtv-1.jar,根目录下不存在该文件,自然会抛出找不到的错误。
- COPY指令语法错误:你当前写的
- docker-compose配置错误
- volumes挂载覆盖了容器内目录:你配置了本地目录挂载到容器的
/app路径,这会直接覆盖镜像构建阶段复制到/app目录下的所有内容,如果本地挂载的目录中没有rtv-1.jar,容器运行时自然找不到文件。 - volumes语法错误:你填写的挂载路径
absolutepathtothedircontaining "rtv-1":/app存在未转义的空格、引号位置错误的问题,本身就是无效配置。
- volumes挂载覆盖了容器内目录:你配置了本地目录挂载到容器的
修复方案
- 修正Dockerfile配置,参考如下:
FROM adoptopenjdk:16-jre-hotspot RUN mkdir -p /app WORKDIR /app ARG JAR_FILE=*.jar # 将构建上下文中匹配到的jar包重命名为rtv-1.jar放入/app目录 COPY ${JAR_FILE} /app/rtv-1.jar # 填写正确的jar包路径 ENTRYPOINT ["java", "-jar", "/app/rtv-1.jar"]
- 修正docker-compose.yml配置:
- 除非你有本地开发热部署的需求,否则直接删除
volumes配置项即可,该挂载是导致jar包被覆盖的核心原因。 - 如果你确实需要保留挂载,请确保本地路径是包含
rtv-1.jar的完整绝对路径,且语法正确,示例:- /home/user/your-project/target:/app
- 修复完成后执行以下命令重新构建启动即可:
docker-compose build --no-cache docker-compose up
内容的提问来源于stack exchange,提问作者user16806803
相关产品推荐
相关产品推荐

