1.使用docker ps 查看程序所在的容器id
2.使用 docker exec -it <containerId> bash,containerId替换为自己的容器id
3.使用java -version 查看容器内的jdk版本
4.将下载好的arthas-boot.jar 从本地上传至宿主机后
再使用 docker cp 本机文件名 容器ID:容器内路径 将arthas-boot.jar复制进容器。
5.使用java -jar arthas-boot.jar 命令,显示如下报错
6.经查是容器只有jre运行环境,因此重新上传jdk-8u391-linux-x64.tar.gz
7.解压上传的jdk-8u391-linux-x64.tar.gz,解压后使用解压文件夹下bin目录的java指令,提示报错
无法识别,实际bin目录下是有java指令的。
8.查看容器的os版本,使用cat /etc/os-release。显示系统版本是Alpine Linux。经过网上查阅,发现原因如下,总结下来就是使用musl libc是运行不了Oracle JDK的。
用Alpine跑了JDK8的镜像结果发现,JDK还是无法执行.后来翻阅文档才发现
Java是基于GUN Standard C library(glibc)
Alpine是基于MUSL libc(mini libc)
9.解决方案就是需要自己下载glibc.apk包,可以选择版本进行下载,我下载的是glibc-2.29-r0.apk
地址:https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-2.29-r0.apk
下载完成后又是一套先上传到宿主机服务器,再从主机拷贝到容器内。
10.安装glibc-2.29-r0.apk,使用 apk add glibc-2.29-r0.apk --no-network提示如下错误,
需要添加一个参数,添加后命令如下apk add glibc-2.29-r0.apk --no-network --allow-untrusted
安装就成功了。
11.接着 使用 java -jar arthas-boot.jar 命令显示成功了。后续的arthas过程此文就不表述了。