docker报错问题解决:Error Invalid or corrupt jarfile app.jar

news2024/10/7 6:40:10

文章目录

  • 1.问题描述
  • 2.问题分析
  • 3.问题解决

1.问题描述

此时处在 /home/ubuntu/app 目录下,并且在该目录下有一个 jenkins-0.0.1-SNAPSHOT.jar。

image-20231018182036352

我在 /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

但遗憾的是,当我执行命令后,并没有运行起来。

image-20231018182646207

2.问题分析

我们先查看一下日志:

image-20231018182729759

提示错误信息:Error: Invalid or corrupt jarfile /app.jar

该错误表示的是 jar 文件无效或损坏,于是我开始考虑是不是 -v 挂载有问题。

于是我使用 docker inspect jenkins-demo 查看该容器信息,特别是挂载情况。然后查看 Mounts 下的信息:

image-20231018185125451

我发现 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 查看数据卷挂载情况和我们希望的一样了:

image-20231018190925962

最后,还有一点可以注意,在指定 容器内路径 时必须使用绝对路径,即如果如下写法:

# -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

image-20231018190152097

会报错:invalid mount config for type “bind”: invalid mount path: ‘app.jar’ mount path must be absolute.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1106572.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

常用Python自动化测试框架有哪些?优缺点对比

随着技术的进步和自动化技术的出现,市面上出现了一些自动化测试框架。只需要进行一些适用性和效率参数的调整,这些自动化测试框架就能够开箱即用,大大节省了测试时间。而且由于这些框架被广泛使用,他们具有很好的健壮性&#xff0…

Unity DOTS System与SystemGroup概述

最近DOTS终于发布了正式的版本, 我们来分享以下DOTS里面System关键概念,方便大家上手学习掌握Unity DOTS开发。 对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀! System是迭代计算与处理World中的…

面试总结分享:25道数据库测试题

1)什么是数据库测试? 数据库测试也称为后端测试。数据库测试分为四个不同的类别。数据完整性测试 数据有效性测试 数据库相关的性能 测试功能,程序和触发器 2)在数据库测试中,我们需要正常检查什么? 通常&a…

【UE5】 ListView使用DataTable数据的蓝图方法

【UE5】 ListView使用DataTable数据的蓝图方法 ListView 是虚幻引擎中的一种用户界面控件,用于显示可滚动的列表。它可以用于显示大量的数据,并提供了各种功能和自定义选项来满足不同的需求。 DataTable是虚幻引擎中的一种数据表格结构,用于存…

美创科技信创数据安全「利基者」!

近日,第一新声研究部正式发布《2023年中国信创网络安全产品竞争力象限》(下称“象限报告“)。 ◼︎ 象限报告综合考虑企业占有率、在技术/应用上的成熟度、在客户方面的交付完成度及口碑、产品在市场/营销/商业模式/行业拓展等战略上的领先性…

在ERP管理系统中,库存管理的基本流程是什么?

在ERP管理系统中,库存管理的基本流程是什么? 下面我就以我们公司正在用的简道云库存管理系统为例,为大家进行库存管理基本流程的演示 这个系统是我们公司自己搭建的,大家如果有需要可以自取,也可以在模板的基础上自行…

0.3万粉暴涨700万播放,实现B站流量、变现双丰收

- 导语 经过国庆长假,2023年已经进入最后一个季度,平台内的热点一换再换,现在B站年轻人们正在关心什么内容、喜欢什么内容呢?本期飞瓜数据(B站版)盘点近期热点内容,提取有效素材和创作模式&…

基于JAVA实现的WEB端UI自动化 -自动化测试简单介绍

1 - Web自动化测试简介 软件测试领域技术不断创新 手工测试重复性工作量较大 技术革新,通过使用工具或者脚本代码让计算机帮助测试人员完成一些简单操作 1.1 自动化测试的本质 其本质是把手工测试转化成使用计算机、软件、程序来测试产品的过程。在设计 测试用例并…

GitLab-访问返回403 forbidden问题处理

访问gitlab时报错forbidden 一般访问量大,密码错误频率高的时候,gitlab防爆机制启动了,对IP做了封禁,导致某些IP访问的是否返回 403 forbidden 1. 查看被封的IP /opt/gitlab/embedded/bin/redis-cli -s /var/opt/gitlab/redis/red…

基于Spring boot轻松实现一个多数据源框架

Spring Boot 提供了 Data JPA 的包&#xff0c;允许你使用类似 ORM 的接口连接到 RDMS。它很容易使用和实现&#xff0c;只需要在 pom.xml 中添加一个条目&#xff08;如果使用的是 Maven&#xff0c;Gradle 则是在 build.gradle 文件中&#xff09;。 <dependencies>&l…

颠覆传统有线通讯,虹科IO-Link wireless解决方案让智能机床的旋转部件实现可靠低延迟无线通信

作为新工业革命的一部分&#xff0c;传统机床正迅速发展成为智能机床。在工业4.0技术的推动下&#xff0c;新的创新应用使机床的效率和功能达到了更高的水平。要实现这些功能&#xff0c;需要在机床上集成传感器和执行器&#xff0c;以提供实时数据和自动化控制。然而&#xff…

【数据结构】队列的实现与优化指南

一、前言 队列是一种重要的数据结构&#xff0c;它按照“先入先出”&#xff08;FIFO&#xff09;的原则管理数据。本文将介绍队列的概念、应用场景&#xff0c;以及如何使用数组实现普通队列和环形队列。 二、内容 2.1 概述 &#xff08;1&#xff09;什么是队列&#xff1…

ant的echo任务

通过echo&#xff0c;可以将一个消息输出到当前的日志记录器、监听器&#xff0c;如果没有覆盖的话&#xff0c;默认就是在控制台输出&#xff08;即System.out&#xff09;。 也可以将消息发送到文件。 可以使用的参数&#xff1a; 举例&#xff0c;build.xml文件的的内容如…

Sectigo OV通配符1590元

通配符SSL证书是一种特殊的SSL证书&#xff0c;它能够为多个域名提供加密保护&#xff0c;这种证书可以用于保护一个主域名及其所有子域名&#xff0c;适合子域名比较多的个人或者企事业单位使用。通配符SSL证书既节省了管理证书的时间&#xff0c;又减少了购买SSL证书的成本&a…

7、Linux驱动开发:设备-自动创建设备节点

目录 &#x1f345;点击这里查看所有博文 随着自己工作的进行&#xff0c;接触到的技术栈也越来越多。给我一个很直观的感受就是&#xff0c;某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了&#xff0c;只有经常会用到的东西才有可能真正记…

【数字人】4、AD-NeRF | 使用 NeRF 来实现从声音到数字人人脸的直接驱动(ICCV2021)

文章目录 一、背景二、方法2.1 适用于 talking head 的神经辐射场2.2 使用辐射场来进行体渲染2.3 独立 NeRF 表达 三、效果 论文&#xff1a;AD-NeRF: Audio Driven Neural Radiance Fields for Talking Head Synthesis 代码&#xff1a;https://github.com/YudongGuo/AD-NeRF…

​蔚来 V2G:带你重新了解如何参与构建新型电力系统

8 月 23 号&#xff0c;蔚来低调的在官方社区社区内发布了一条推文&#xff0c;推文为 「蔚来参与全国最大规模 V2G 需求响应」。 而车网互动验证中心(简称 e-Park)的 V2G 试验&#xff0c;在江苏无锡正式启动。 本次响应时间为 30 分钟&#xff0c;50 台电动车送电近 2000kW…

25.1 MySQL SELECT语句

1. SQL概述 1.1 SQL背景知识 1946年, 世界上诞生了第一台电脑, 而今借由这台电脑的发展, 互联网已经成为一个独立的世界. 在过去几十年里, 许多技术和产业在互联网的舞台上兴衰交替. 然而, 有一门技术却从未消失, 甚至日益强大, 那就是SQL.SQL(Structured Query Language&…

【软件工程】简单讲讲设计模式七大原则,以及代码简单举例

给自己一个目标&#xff0c;然后坚持一段时间&#xff0c;总会有收获和感悟&#xff01; 学软件或计算机专业的同学应该都会接触到一门课程《软件工程》&#xff0c;七大设计原则属于软件工程中的重要知识点。 目录 一、软件工程1.1、提供指导和规范1.2、确保软件质量1.3、提高…

【经验分享】解决vscode编码问题

目录 先看一下我遇到的问题和你们的一不一样 下面是我查到的解决办法&#xff1a; 简单点说就是 我们看看解决后的效果 先看一下我遇到的问题和你们的一不一样 我一开始以为就是编码问题。 下面是我查到的解决办法&#xff1a; 这个错误提示看起来仍然是中文乱码。可能是由于…