如何在我的 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"
我正在编写一个 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"