如何在我的 dockerfile 中为 Windows 容器设置系统路径?

How do I set System Path in my dockerfile for a Windows Container?

我正在编写一个 Dockerfile 来使用 Windows 10 中新的原生 docker 支持为 OpenJDK 创建一个容器。这不是使用 docker-工具箱。我想将系统路径设置为包含 java 路径,但我不知道该怎么做。我已经尝试了以下文件的多种变体,但无法正确设置路径。

FROM nanoserver:latest

RUN powershell -Command "Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force;Set-PSRepository -Name PSGallery -InstallationPolicy Trusted;Install-Module PS7Zip;" 

ADD https://github.com/ojdkbuild/ojdkbuild/releases/download/1.8.0.91-3/java-1.8.0-openjdk-1.8.0.91-3.b14.windows.x86_64.zip java.zip

RUN setx /M JRE_HOME C:\java-1.8.0-openjdk-1.8.0.91-3.b14.windows.x86_64\jre
RUN setx /M JAVA_HOME C:\java-1.8.0-openjdk-1.8.0.91-3.b14.windows.x86_64
RUN powershell -Command "Expand-7Zip java.zip"
RUN ["powershell", "$env:Path=$env:Path+\";C:\java-1.8.0-openjdk-1.8.0.91-3.b14.windows.x86_64\bin\""]

不幸的是,Powershell 不允许使用该方法修改系统路径变量。 $env:Path 提供对系统路径的读取权限,而不是写入权限。这意味着如果您更改 $env:Path 它只会影响您当前的 PS 环境。

请参阅此 link 以了解更改系统路径变量的方法:http://codingbee.net/tutorials/powershell/powershell-make-a-permanent-change-to-the-path-environment-variable/

看起来这个 Golang 示例有一个笨拙的方法来做到这一点:https://github.com/MicrosoftDocs/Virtualization-Documentation/blob/master/windows-container-samples/golang/Dockerfile#L24

如果是 windows 容器,您可以在 docker 文件中执行类似于下面提到的示例的操作。请确保您的 windows 图像在某个位置应该有任何此类 jdk/jre 目录。

对我来说,我一直在使用 windows 服务器 core:ltsc2019 (FROM mcr.microsoft.com/windows/servercore:ltsc2019) 这是用一些 wildfly 配置和 jdk 定制的。但总而言之,setx 为我工作,将 java 直接设置到路径中。

示例:

RUN setx path "C:\jdk8u252-b09\bin"