在Windows Docker容器中附加到PATH

时间:2017-02-07 14:53:07

标签: docker containers 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"

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

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

5 个答案:

答案 0 :(得分:7)

不幸的是RUN不起作用,因为windows环境变量的工作方式与linux不同。 more info

截至目前,唯一的方法是通过RUN setx path "%path%;C:\Foo\bin"

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

target

答案 1 :(得分:6)

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

在yout docker context(例如setpath.ps1)中创建一个包含以下内容的powershell脚本:

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

将此脚本添加到容器dockerfile并运行脚本。将这样的内容添加到您的dockerfile:

ADD ./setpath.ps1 c:/MyScripts/setpath.ps1
RUN powershell -Command c:\MyScripts\setpath.ps1

答案 2 :(得分:3)

这对我有用:

USER ContainerAdministrator
RUN setx /M PATH "%PATH%;C:/your/path"
USER ContainerUser

在.net sdk Dockerfile中看到:https://github.com/dotnet/dotnet-docker/blob/20ea9f045a8eacef3fc33d41d58151d793f0cf36/2.1/sdk/nanoserver-1909/amd64/Dockerfile#L28-L29

答案 3 :(得分:2)

[Environment]::SetEnvironmentVariable是一种好方法,但在纳米服务器中不起作用。 最好的选择是:

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

答案 4 :(得分:0)

尽管之前有所有答案,但我在某些环境中遇到了问题。基本上在自定义本地测试环境中,使用 %PATH%;C:\foo\bar 方式的 setx 即使文件夹有像 C:\Program Files 这样的空格也能工作。虽然在我们的生产环境中尝试它时不起作用。 检查 Microsoft 在他们自己的映像上安装基本包时所做的事情,结果证明更好、更可靠的方法是这样使用命令:

RUN setx /M PATH $(${Env:PATH} + \";${Env:ProgramFiles(x86)}\foo\bar\")

这样 docker 就能获取正确的路径并正确更新 PATH 数据。

编辑: 我已经修复了命令中缺少的尾随 \,感谢 Robin Ding :)