如何在VSCode IDE中使用JRE的docker容器



在我的IDE VSCode中,我用一个";Java";码头集装箱。到目前为止,我已经能够设置运行时,但是我没能将IDE指向docker容器的Java主目录。

根据扩展的页面,这是我需要实现的,以便使扩展工作:

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

Java开发工具包的路径可以由VS代码设置(工作区/用户设置(中的java.home设置指定。如果未指定,将按以下顺序搜索它,直到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映像中的java主页位于/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. 将卷装载arg添加到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";目录(存储卷的位置(。最终,出现了与上述步骤中所述相同的错误。

好吧,我想我刚刚想好了如何实现它,但我认为这并不是最好的方法。因为它基本上与下载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文件直接存储在操作系统上。

最新更新