web-dev-qa-db-fra.com

Ajout à PATH dans un conteneur Windows Docker

Je dois ajouter au PATH dans un conteneur Windows Docker, et j'ai essayé de nombreuses permutations.

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"

Aucun de ces travaux: ils n'évaluent pas la variable PATH préexistante.

Quelle est la bonne syntaxe à ajouter au PATH? Puis-je même ajouter au PATH dans Docker? (Je peux sur des conteneurs Linux similaires)

15
macetw

Malheureusement, ENV ne fonctionnera pas, car la variable d'environnement Windows fonctionne un peu différemment de Linux. plus d'informations

Pour l'instant, la seule façon de le faire est par le biais de RUN

Mais vous n'avez pas besoin de créer un fichier séparé pour ce faire. Cela peut être fait par la commande d'une ligne beaucoup plus simple suivante:

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

19
mirsik

Vous pouvez définir des variables d'environnement de manière permanente dans le conteneur à l'aide d'un script PowerShell.

Créez un script PowerShell dans votre contexte Docker (par exemple setpath.ps1) contenant ceci:

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

Ajoutez ce script à votre dockerfile de conteneur et exécutez le script. Ajoutez quelque chose comme ça à votre dockerfile:

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

[Environment]::SetEnvironmentVariable est un bon moyen, mais ne fonctionnera pas dans le nanoserveur. Le meilleur choix est:

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

Cela a fonctionné pour moi:

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

Comme indiqué dans le Dockerfile .net sdk: https://github.com/dotnet/dotnet-docker/blob/20ea9f045a8eacef3fc33d41d58151d793f0cf36/2.1/sdk/nanoserver-1909/AMD64/Dockerfile#L28-L29

0
Mark Gia Bao Nguyen