通过jad/mc/redefine命令,在docker容器中实现动态更新代码的功能:

通过jad/mc/redefine命令,在docker容器中实现动态更新代码的功能:
demos_dockerfile:
from openjdk:8u232-jdk
maintainer czm<chengzhiming06@163.com>
add demo-0.0.1-SNAPSHOT.jar demo.jar
WORKDIR /app
COPY ./demo-0.0.1-SNAPSHOT.jar demo.jar
VOLUME /tmp
EXPOSE 8080
ENTRYPOINT ["java","-jar","demo.jar"]

通过dockerfile构建镜像:docker build -f ./demos_dockerfile -t (镜像名称)demo .
通过镜像构建容器:docker run -di --name (镜像名称)demo -p 8080:8080 (容器名称)demo
查看容器日志:docker logs -f --tail=100 (id或者name名称)a484ddc601e3
进入容器:docker exec -it (id或者name名称)a484ddc601e3 /bin/bash


在容器中使用arthas,5步操作:
一: 拉取jar包并监控:wget https://arthas.aliyun.com/arthas-boot.jar

二: 使用jad命令编译:jad --source-only com.example.demo.arthas.user.TestController > /tmp/TestController.java
--如果遇到执行失败,在确保执行路径没有问题的前提下,可尝试推出arthas,然后重试即可

三: 编辑文件:vim /tmp/TestController.java(注意该执行是在容器中执行,不是在arthas中执行)
--如果遇到无法执行vim命令,解决办法是:
1)从本地windows服务编辑后上传到linux服务器指定位置
2)执行apt-get install vim -y && apt-get update

四: 反编译文件到指定目录:mc /tmp/TestController.java -d /tmp
--如果遇到mc命令执行失败,解决办法是:
1)从本地借助像ideal工具,反编译好之后,上传到linux服务器指定位置,或者按如下操作
1)将{jdk}/lib下的tool.jar文件复制到{jdk}/jre/lib
2)进入jre/bin目录,用java.exe -jar xx分别启动应用和arthas

五: 将修改之后的文件编译到内存中:redefine /tmp/TestController.class

注意:该操作只能在docker容器中运行,无法通过远程浏览器访问,若要实现windows远程访问,有需要后续会继续更新。
 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程治铭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值