如何从Quarkus Docker镜像中获取Java源代码(Quarkus 2.12.0.Final)
从Quarkus 2.12.0.Final Docker镜像中获取Java源代码的方法
根据镜像的构建方式,分为以下几种场景处理:
场景1:镜像中直接包含源代码(少见,通常仅开发环境镜像)
如果构建镜像时未移除源代码目录,可直接从容器中提取:
- 启动临时容器:
docker run -d --name quarkus-temp <你的镜像名称/ID> - 进入容器(若镜像基于Alpine/Ubi-Minimal,用
/bin/sh替代/bin/bash):docker exec -it quarkus-temp /bin/bash - 查找源码位置:Quarkus开发镜像的源码通常在
/workspace/src或/app/src目录,可通过find / -name "*.java"全局搜索 - 拷贝源码到本地:
docker cp quarkus-temp:/path/to/source-dir ./local-source-folder - 清理临时容器:
docker stop quarkus-temp && docker rm quarkus-temp
场景2:镜像仅包含编译后的Class文件(生产镜像常见)
需要先提取Class文件,再通过反编译工具还原源码:
步骤1:提取容器中的Jar包/Class文件
- 查看应用文件路径:运行临时容器并列出目录:
docker run --rm <你的镜像名称/ID> ls /workspace/quarkus-app(Quarkus默认生产镜像的应用目录通常为/workspace/quarkus-app) - 拷贝核心Jar包到本地:
docker run -d --name quarkus-temp <你的镜像名称/ID>,然后执行docker cp quarkus-temp:/workspace/quarkus-app/quarkus-run.jar ./ - 清理临时容器:
docker stop quarkus-temp && docker rm quarkus-temp
步骤2:反编译Class文件
- 解压Jar包:
unzip quarkus-run.jar -d quarkus-class-files - 使用反编译工具还原源码:
- 用FernFlower(命令行工具):下载FernFlower的Jar包后,执行
java -jar fernflower.jar quarkus-class-files/ ./output-source,生成的源码会在output-source目录中 - 用JD-GUI(可视化工具):直接打开
quarkus-run.jar,可查看反编译后的代码并导出到本地
- 用FernFlower(命令行工具):下载FernFlower的Jar包后,执行
场景3:镜像为Quarkus原生镜像(Native Image)
这种情况下应用已被编译为机器码,无法通过常规反编译工具还原Java源代码,几乎没有可行的方法获取源码。
注意:提取和反编译他人镜像中的代码前,请确保符合相关版权和许可协议,避免法律风险。
内容的提问来源于stack exchange,提问作者lopah elision
相关产品推荐
相关产品推荐

