Docker构建成功但运行报错:找不到jar相关命令,请求调试帮助
问题分析与解决方案
嘿,我一眼就揪出你这个问题的元凶了——ENTRYPOINT指令里用了中文全角引号!这才是导致运行报错的核心原因,和相对路径关系不大。
1. 修复ENTRYPOINT的引号问题
你的Dockerfile里这段代码:
ENTRYPOINT [“java”,”-jar”,”/app.jar”]
这里的“”是中文全角双引号,Docker会把整个["java","-jar","/app.jar"]当成一个完整的命令去查找,自然会提示“not found”。把引号换成英文半角的""就好:
ENTRYPOINT ["java","-jar","/app.jar"]
2. 确认Jar文件的存放位置
你用了ADD target/myjar-1.0-SNAPSHOT.jar app.jar,这条指令会把本地target目录下的jar包复制到容器的**根目录(/)**下,并命名为app.jar,所以/app.jar这个绝对路径是完全正确的,不存在相对路径问题。
如果还是担心路径问题,可以在构建后进入容器验证:
# 启动容器并进入交互式shell docker run --rm -it myjar /bin/sh # 查看根目录下的文件 ls /
如果能看到app.jar,说明路径没问题。
3. 额外调试小技巧
- 先在本地手动运行
java -jar target/myjar-1.0-SNAPSHOT.jar,确认jar包本身能正常启动,排除代码或依赖问题。 - 确保执行
docker build -t myjar时,是在你的Maven/Gradle项目根目录下(也就是包含target目录的上级目录),不然Docker找不到target里的jar包。
这样应该就能解决你的问题了,赶紧试试吧!
内容的提问来源于stack exchange,提问作者Syan31




