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コンテナーでできます)
残念ながら、ENV
は機能しません。これは、Windows環境変数の機能がLinuxとは少し異なるためです。 詳細
現在、これを行う唯一の方法はRUN
を使用することです
ただし、これを行うために別のファイルを作成する必要はありません。これは、次のはるかに簡単な1行のコマンドで実行できます。
RUN setx path "%path%;C:\Foo\bin"
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
[Environment]::SetEnvironmentVariable
は良い方法ですが、nanoserverでは機能しません。最良の選択は次のとおりです。
RUN setx path '%path%;C:\Foo\bin'
これは私のために働きました:
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