记录一次docker容器内无法运行java的问题

news/2024/9/28 19:05:42 标签: docker, java, 容器

目录

问题描述:

解决方案:


 问题描述:

项目要求容器化部署,在其他人给的基础镜像上添加我的java程序,由于其他人给的镜像没有jdk环境,需要通过dockerfile将jdk拷入和配置环境变量来构建java环境,启动命令为启动jar包的“java -jar”命令,在windows环境和linux虚拟机中测试均可正常运行,在甲方服务器上运行时报错:

# There is insufficient memory for the Java Runtime Environment to continue.
# Cannot create GC thread. Out of system resources.
# An error report file with more information is saved as:
# //hs_err_pid1.log

甲方服务器为x86架构,系统为银河麒麟,docker版本为18.x,同事在centos虚拟机中运行时遇到过一样的报错,通过升级docker到19版本就解决了,于是给甲方服务器升级docker,分别升级到19、20依旧报错;尝试在jar包的启动命令中添加"-Xmx256m -Xms128m"参数来指定内存容量,试了很多参数,依旧报错;启动容器时的docker命令中添加"-m 1g"来指定容器内存大小,试了很多参数仍旧报错,只不过报错变成了

Error occurred during initialization of VM
Cannot create VM thread. Out of system resources.

取消容器的启动命令,直接启动容器后,进入命令行,使用java命令,报相同错误;

测试了多种基础镜像,总结发现和gcc有关,其他人提供的基础镜像中,升级安装过gcc的,或者内核为debian12的就会出现这种报错,debian11的则没有问题。

解决方案:

在使用docker run命令启动容器时,添加参数“--security-opt seccomp=unconfined”,例如:

docker run -it --security-opt seccomp=unconfined -p 20003:20003 -v /home/output:/home/output orbit:jar1.0

 添加参数后可以正常使用java命令,但是原因未知

参考链接:java - "insufficient memory" while running eclipse-temurin:17-jdk Docker image - Stack Overflow


http://www.niftyadmin.cn/n/5681679.html

相关文章

k8s中,服务的自动注册、自动感知、负载均衡,三个功能的含义及测试验证

自动感知,指的是客户端只用访问服务的ip,而不用关心pod在哪个节点,以及pod的ip是多少。 服务可以自动感知pod的位置及ip,核心是通过selector标签选择器找到pod 自动注册,指的是服务创建之后,会自动在k8s的…

累加求和-C语言

1.问题: 计算123……100的和,要求分别用while、do while、for循环实现。 2.解答: 累加问题,先后将100个数相加。要重复进行100次加法运算,可以用循环结构来实现。重复执行循环体100次,每次加一个数。 3.代…

海外盲盒APP系统:盲盒出海热潮下的选择

近年来,盲盒市场展现出了强劲的发展态势,不仅在国内持续上演“盲盒热”,在海外市场中更是“一盒难求”!在盲盒出海的浪潮下,盲盒在国际市场中迅速火爆,一时席卷了全球市场。 海外盲盒系统是企业拓展海外市…

洛谷P1197.星球大战

洛谷P1197.星球大战 并查集 贪心 正着不好想&#xff0c;逆向思维将摧毁变为修建 一开始处理图的时候就是将所有没有被炸的点能连的连在一起(图论)并求出连通块数量(并查集)然后逐步反向将被摧毁的点复原 #include <bits/stdc.h>using namespace std;const int N 4…

DarkLabel2.4版本导入MOT17数据集

目录 背景导入效果MOT17数据集说明DarkLabel导入视频导入gt文件 背景 做目标追踪&#xff0c;目前找了一圈开源工具&#xff0c;发现DarkLabel还是很好用的&#xff0c;提供自动目标跟踪&#xff0c;标注很方便。 由于目标追踪我用的是bytetrack&#xff0c;官网是用mot17数据…

Arthas redefine(加载外部的.class文件,redefine到JVM里 )

文章目录 二、命令列表2.2 class/classloader相关命令2.2.3 redefine&#xff08;加载外部的.class文件&#xff0c;redefine到JVM里 &#xff09;举例1&#xff1a;加载新的代码&#xff0c;jad/mc 命令使用举例2&#xff1a;上传 .class 文件到服务器的技巧 二、命令列表 2.…

互联网安全为什么要做风险评估:构建数字世界的坚固防线

在当今这个数字化时代&#xff0c;互联网已经成为社会运转不可或缺的基础设施&#xff0c;它深刻地改变了人们的生活方式、工作模式以及信息交流的渠道。然而&#xff0c;随着互联网的普及和应用范围的扩大&#xff0c;网络安全问题也日益凸显&#xff0c;成为制约互联网健康发…

Mybatis 9种动态 sql 标签使用

MyBatis提供了9种动态SQL标签&#xff1a;trim、where、set、foreach、if、choose、when、otherwise、bind&#xff1b; 1.if 标签 <select id"getUser">select * from User<where><if test" age ! null ">and age > #{age}</if…