web-dev-qa-db-ja.com

Windows DockerコンテナーのPATHへの追加

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コンテナーでできます)

15
macetw

残念ながら、ENVは機能しません。これは、Windows環境変数の機能がLinuxとは少し異なるためです。 詳細

現在、これを行う唯一の方法はRUNを使用することです

ただし、これを行うために別のファイルを作成する必要はありません。これは、次のはるかに簡単な1行のコマンドで実行できます。

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

19
mirsik

Powershellスクリプトを使用して、コンテナーに永続的に環境変数を設定できます。

以下を含むyout dockerコンテキスト(たとえば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
7
cer49152

[Environment]::SetEnvironmentVariableは良い方法ですが、nanoserverでは機能しません。最良の選択は次のとおりです。

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

これは私のために働きました:

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

0