在Windows Docker容器中附加到PATH

mac*_*etw 9 containers docker windows-container

我需要在Windows Docker容器中附加到PATH,并且我尝试了许多排列.

ENV PATH=%PATH%;C:\\Foo\\bin
ENV PATH=$PATH;C:\\Foo\\bin
ENV PATH="%PATH%;C:\Foo\bin"
ENV PATH="$PATH;C:\Foo\bin"
RUN "set PATH=%PATH%;C:\Foo\bin"
Run Code Online (Sandbox Code Playgroud)

这些都不起作用:它们不评估预先存在的PATH变量.

附加到PATH的正确语法是什么?我甚至可以在Docker中附加到PATH吗?(我可以在类似的Linux容器上)

小智 13

不幸的是ENV不行,因为windows环境变量的工作方式与linux不同.更多信息

截至目前,唯一的方法是通过 RUN

但是您不需要创建单独的文件来执行此操作.这可以通过以下更简单的一行命令来完成:

RUN setx path "%path%;C:\Foo\bin"

  • PS equiv:RUN setx/M PATH $($ Env:PATH +'; C:\ Foo\bin) (6认同)
  • @JasonCoder - 谢谢!在最后一个paren之前错过了最后的单引号. (3认同)

Mar*_*yen 10

这对我有用:

USER ContainerAdministrator
RUN setx /M PATH "%PATH%;C:/your/path"
USER ContainerUser
Run Code Online (Sandbox Code Playgroud)

如.net sdk Dockerfile中所示:https://github.com/dotnet/dotnet-docker/blob/20ea9f045a8eacef3fc33d41d58151d793f0cf36/2.1/sdk/nanoserver-1909/amd64/Dockerfile#L28-L29


che*_*hty 8

[Environment]::SetEnvironmentVariable是一个好方法,但在 nanoserver 中不起作用。最好的选择是:

RUN setx path '%path%;C:\Foo\bin'
Run Code Online (Sandbox Code Playgroud)


小智 7

您可以使用powershell脚本在容器中永久设置环境变量.

在yout docker上下文中创建一个powershell脚本(例如setpath.ps1),其中包含:

[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\Foo\bin", [EnvironmentVariableTarget]::Machine)
Run Code Online (Sandbox Code Playgroud)

将此脚本添加到容器dockerfile并运行脚本.将以下内容添加到dockerfile:

ADD ./setpath.ps1 c:/MyScripts/setpath.ps1
RUN powershell -Command c:\MyScripts\setpath.ps1
Run Code Online (Sandbox Code Playgroud)