在同一 运行 命令中多次更新路径
Updating Path multiple times in the same RUN command
考虑以下 Dockerfile
。在最后几行,首先安装了git
,然后在路径环境变量中附加了一些东西。
FROM mcr.microsoft.com/windows/servercore:ltsc2022
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop';"]
RUN Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
RUN choco install -y git
RUN [Environment]::SetEnvironmentVariable('Path', $Env:Path + ';C:\my-path', [EnvironmentVariableTarget]::Machine)
构建完成后,路径如下所示,因此将 git
添加到路径中。
C:\ProgramData\chocolatey\bin;C:\Program Files\Git\cmd;C:\my-path;
这是一个等效的 Dockerfile
,但我将最后几行做成一个 RUN
命令以进行优化。
FROM mcr.microsoft.com/windows/servercore:ltsc2022
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop';"]
RUN Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
RUN choco install -y git; \
[Environment]::SetEnvironmentVariable('Path', $Env:Path + ';C:\my-path', [EnvironmentVariableTarget]::Machine)
构建完成后,git
不在路径上!
C:\ProgramData\chocolatey\bin;C:\my-path;
为什么会这样,我该如何解决?
解决方法是使用 cmd
而不是 powershell
。
以下两种方法都有效:
RUN choco install -y git; \
cmd /c "setx path '%path%;C:\my-path'"
SHELL ["cmd", "/S", "/C"]
RUN choco install -y git && \
setx path "%path%;C:\my-path"
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop';"]
考虑以下 Dockerfile
。在最后几行,首先安装了git
,然后在路径环境变量中附加了一些东西。
FROM mcr.microsoft.com/windows/servercore:ltsc2022
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop';"]
RUN Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
RUN choco install -y git
RUN [Environment]::SetEnvironmentVariable('Path', $Env:Path + ';C:\my-path', [EnvironmentVariableTarget]::Machine)
构建完成后,路径如下所示,因此将 git
添加到路径中。
C:\ProgramData\chocolatey\bin;C:\Program Files\Git\cmd;C:\my-path;
这是一个等效的 Dockerfile
,但我将最后几行做成一个 RUN
命令以进行优化。
FROM mcr.microsoft.com/windows/servercore:ltsc2022
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop';"]
RUN Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
RUN choco install -y git; \
[Environment]::SetEnvironmentVariable('Path', $Env:Path + ';C:\my-path', [EnvironmentVariableTarget]::Machine)
构建完成后,git
不在路径上!
C:\ProgramData\chocolatey\bin;C:\my-path;
为什么会这样,我该如何解决?
解决方法是使用 cmd
而不是 powershell
。
以下两种方法都有效:
RUN choco install -y git; \
cmd /c "setx path '%path%;C:\my-path'"
SHELL ["cmd", "/S", "/C"]
RUN choco install -y git && \
setx path "%path%;C:\my-path"
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop';"]