【问题标题】:How to use a docker container for JRE in VSCode IDE?如何在 VSCode IDE 中为 JRE 使用 docker 容器?
【发布时间】:2021-03-19 12:26:16
【问题描述】:

在我的 IDE VSCode 中,我使用“Java”docker 容器配置了 Language support for Java(TM) by Red Hat 扩展。到目前为止,我已经能够设置运行时,但是我没有设法将我的 IDE 指向 docker 容器的 Java 主目录。

根据扩展程序的页面,这是我需要实现的才能使扩展程序工作:

此 JDK 将用于启动 Java 语言服务器。并且默认情况下,也将用于编译您的项目。

可以通过 VS Code 设置(工作区/用户设置)中的 java.home 设置指定 Java 开发工具包的路径。如果未指定,则按以下顺序搜索,直到 JDK 满足当前最低要求。

  • JDK_HOME 环境变量
  • JAVA_HOME 环境变量
  • 在当前系统路径上

我如何设置运行时

正如我已经说过的,我设法设置了一个运行时。我就是这样做的:

  1. 为 docker 容器添加了一个 java 二进制文件,在我的例子中,我把它放在 /usr/local/bin 中。

    #!/bin/sh
    
    docker run \
         --name usr-local-bin-java \
         -i \
         --rm \
         --network=host \
         -w /root/project \
         -v "$PWD":/root/project \
         -v "$PWD"/.docker/mvn/cache:/root/.m2 \
         maven:3-jdk-8-slim \
         java "$@"
    
    exit $?
    

    我正在使用 Maven 映像,因为我还需要 Maven,其中还包括 Java。当然也可以使用 OpenJDK 映像。

  2. 使用以下内容添加/更新了我的 IDE 用户 settings.json

    "java.configuration.runtimes": [
         {
             "name": "JavaSE-1.8",
             "path": "/usr/local/bin/java",
             "default": true
         }
    ],
    

我被困在哪里

所以我面前的最后一步是指定java.home 的路径。但是,如果它位于 docker 容器中,我将如何做到这一点?那么最明显的解决方案是将docker容器中的路径安装到我的主机上。不幸的是,这不起作用,因为我需要的路径存储在 docker 映像中,因此当我将主机挂载到该路径时,它将导致一个空目录。

总结一下这个行不通(注意:我的docker镜像中的java home位于/usr/local/openjdk-8):

  1. 将以下参数添加到java 二进制文件中,以设置卷挂载:
    -v "$PWD"/.docker/java/jdk:/usr/local/openjdk-8 \
    
  2. java.home 属性添加到settings.json 配置:
    "java.home": "${cwd}/.docker/java/jdk",
    

这将导致类似:“java.home 配置未指向有效的 JDK”。

有谁知道:我在这里有哪些选择?我可以指向交互式自动删除 docker 容器中的目录吗?

PS:我不想直接在我的操作系统上安装 JDK。

更新 #1:我设法将一个卷从 docker 容器安装到我的主机

  1. 创建一个新的 docker 卷:
    docker volume create openjdk
    
  2. 将卷挂载参数添加到java 二进制文件中:
    -v openjdk:/usr/local/openjdk-8 \
    
  3. 运行二进制文件:
    java -version
    
  4. JDK_HOMEJAVA_HOME 变量添加到您的bash 环境中:
    JAVA_HOME="$(docker inspect -f '{{ index .Mountpoint }}' openjdk)"
    
  5. 重新加载 IDE 并出现错误...

    运行 Java 扩展需要 Java 11 或更高版本。请下载并安装最新的 JDK。您仍然可以通过配置 'java.configuration.runtimes' 来使用旧 JDK 编译您的项目

我什至尝试将java.home属性直接设置为卷的挂载点,导致权限被拒绝错误,因此我chmod +rx -R我的整个“var lib docker”目录(存储卷的地方) .最终发生了与上述步骤相同的错误。

【问题讨论】:

    标签: java docker visual-studio-code


    【解决方案1】:

    好的,我想我只是想出了如何完成它,但这并不是我想说的最好的方法。因为基本上和下载jdk放在某个目录下是一样的……反正:

    1. 创建一个 docker 卷来存储 jdk:
      docker volume create openjdk-15
      
    2. 使用您想要的 jdk 运行一个容器(需要是 Java 11 或更高版本),同时让它填充您刚刚创建的卷:
      docker run --rm -v openjdk-15:/usr/local/openjdk-15 openjdk:15-slim java -version
      
    3. (可选)我喜欢对卷进行符号链接,例如:
      sudo ln -s $(docker inspect -f '{{ index .Mountpoint }}' openjdk-15) /usr/local/lib/openjdk-15
      
    4. settings.json中配置扩展:
      "java.home": "/usr/local/lib/openjdk-15",
      "java.configuration.runtimes": [
        {
          "name": "JavaSE-15",
          "path": "/usr/local/lib/openjdk-15",
          "default": true
        }
      ]
      

    因此不需要自定义的 java 二进制文件来启动 docker 容器。但是,您仍然必须将 JDK 文件直接存储在您的操作系统上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-25
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多