docker报错问题解决:Error Invalid or corrupt jarfile app.jar
最佳答案 问答题库518位专家为你答疑解惑
文章目录
- 1.问题描述
- 2.问题分析
- 3.问题解决
1.问题描述
此时处在 /home/ubuntu/app
目录下,并且在该目录下有一个 jenkins-0.0.1-SNAPSHOT.jar。
我在 /home/ubuntu/app
目录下执行了 docker 容器运行命令:
# 映射 8859 端口
# 容器名为 jenkins-demo
# 将 jenkins-0.0.1-SNAPSHOT.jar 复制到容器内的 /app.jar
# 以 jdk11 为容器镜像
# 执行命令 java -jar /app.jar 运行 java 程序
docker run -dp 8859:8859 \
--name jenkins-demo \
-v jenkins-0.0.1-SNAPSHOT.jar:/app.jar \
openjdk:11 \
java -jar /app.jar
但遗憾的是,当我执行命令后,并没有运行起来。
2.问题分析
我们先查看一下日志:
提示错误信息:Error: Invalid or corrupt jarfile /app.jar
该错误表示的是 jar 文件无效或损坏,于是我开始考虑是不是 -v
挂载有问题。
于是我使用 docker inspect jenkins-demo
查看该容器信息,特别是挂载情况。然后查看 Mounts
下的信息:
我发现 jenkins-0.0.1-SNAPSHOT.jar
成了数据卷名称,/app.jar
是容器内的目录。
这时候我才突然想起来,如果在 -v
时直接写个名称,那么 docker 会将它识别为是一个数据卷名称而不是本地文件或目录名。
🚩 即:本地目录或文件必须以 /
或 ./
开头,如果直接以名字开头,会被识别为数据卷名而非本地目录名。例如:
# 会被识别为一个数据卷叫mysql,运行时会自动创建这个数据卷
-v mysql:/var/lib/mysql# 会被识别为当前目录下的mysql目录,运行时如果不存在会创建目录
-v ./mysql:/var/lib/mysql
3.问题解决
我们可以将之前的 docker run 命令修改为以下两种方式:
-
绝对路径方式
docker run -dp 8859:8859 \ --name jenkins-demo \ -v /home/ubuntu/app/jenkins-0.0.1-SNAPSHOT.jar:/app.jar \ openjdk:11 \ java -jar /app.jar
-
相对路径方式
# 需要保存当前执行命令所在位置是在 /home/ubuntu/app 目录下,因为我将 jenkins-0.0.1-SNAPSHOT.jar 就是放在了此目录下 docker run -dp 8859:8859 \ --name jenkins-demo \ -v ./jenkins-0.0.1-SNAPSHOT.jar:/app.jar \ openjdk:11 \ java -jar /app.jar
这时候我们再使用 docker inspect jenkins-demo
查看数据卷挂载情况和我们希望的一样了:
最后,还有一点可以注意,在指定 容器内路径 时必须使用绝对路径,即如果如下写法:
# -v 挂载时将 /app.jar 修改为 app.jar
docker run -dp 8859:8859 \
--name jenkins-demo \
-v ./jenkins-0.0.1-SNAPSHOT.jar:app.jar \
openjdk:11 \
java -jar /app.jar
会报错:invalid mount config for type “bind”: invalid mount path: ‘app.jar’ mount path must be absolute.
99%的人还看了
相似问题
- 重磅!1区、60年老牌期刊被踢?共5本被剔除!11月SCIE/SSCI期刊目录更新!
- vsto word 获取目录起始页和结束页,如目录起始位置为2、结束位置为3,返回2和3
- Linux文件目录以及文件类型
- 基于pytest-bdd的项目目录结构和命名规范
- 事关Django的静态资源目录设置(Django的setting.py中的三句静态资源(static)目录设置语句分别是什么作用?)
- iOS源码-工程目录讲解
- 报错资源不足,k8s使用containerd运行容器修改挂载点根目录换成/home
- 十三、Linux文件目录指令
- Linux(4):Linux文件与目录管理
- Linux(3):Linux 的文件权限与目录配置
猜你感兴趣
版权申明
本文"docker报错问题解决:Error Invalid or corrupt jarfile app.jar":http://eshow365.cn/6-21667-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 【JavaScript】深入浅出理解事件循环
- 下一篇: LabVIEW生成和打印条形码