VSCode配置Docker容器内JRE为Java扩展设置合法java.home路径
VSCode Java扩展对接Docker容器化JDK的配置阻塞问题
基础环境与已完成配置
- 开发链路:以VSCode为开发IDE,搭配Red Hat出品的
Java(TM)语言支持扩展,依托Docker容器化Java运行环境完成开发,全程不依赖本地操作系统安装的JDK - 已完成的基础运行打通:
- 在主机
/usr/local/bin路径下自定义可执行脚本替代系统java命令:脚本基于maven:3-jdk-8-slim镜像启动Docker容器,将项目目录、Maven缓存目录挂载到容器内,直接转发Java执行命令 - 在用户级
settings.json中配置java.configuration.runtimes项,将上述自定义的java脚本路径登记为JavaSE-1.8版本的默认项目运行时
- 在主机
- 扩展官方要求规则:
- 该扩展需指定合法的本地JDK路径才能启动Java语言服务器,默认会使用该路径完成项目编译
- JDK路径识别优先级为:VSCode设置中的
java.home配置项 > 系统JDK_HOME环境变量 > 系统JAVA_HOME环境变量 > 系统PATH路径,扩展会自动匹配符合最低版本要求的JDK
已尝试的方案与对应阻塞
- Bind Mount映射容器JDK路径方案
- 操作逻辑:所用基础镜像内JDK默认路径为
/usr/local/openjdk-8,尝试通过Bind Mount将容器内该JDK路径直接映射到主机本地目录,再将主机侧的映射目录配置为java.home值 - 失败原因:将主机空目录直接挂载到容器内该路径时,会覆盖镜像内原有的全部JDK文件,最终主机侧挂载目录无任何有效JDK内容
- 报错提示:
java.home配置未指向合法JDK
- 操作逻辑:所用基础镜像内JDK默认路径为
- Docker命名卷同步JDK路径方案
- 操作逻辑:创建名为
openjdk的Docker命名卷,启动临时容器将容器内/usr/local/openjdk-8路径挂载到该命名卷完成文件同步,通过docker inspect命令获取命名卷在主机的实际存储路径,将该路径设置为JAVA_HOME环境变量并直接配置为java.home值,调整目录访问权限后重载VSCode - 报错提示:运行Java扩展需要Java 11及以上版本,可通过配置
java.configuration.runtimes项使用旧版本JDK编译项目 - 补充验证:即便放开Docker卷在主机存储目录的全部可读、可执行权限,切换高版本JDK镜像重复上述命名卷同步操作,仍然触发相同报错
- 操作逻辑:创建名为
核心诉求
不在本地操作系统直接安装任何JDK,找到可将Docker容器内JDK路径作为VSCode Java扩展运行依赖的可行配置方案。
内容的提问来源于stack exchange,提问作者luukvhoudt
相关产品推荐
相关产品推荐

