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)
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"
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
[Environment]::SetEnvironmentVariable
est un bon moyen, mais ne fonctionnera pas dans le nanoserveur. Le meilleur choix est:
RUN setx path '%path%;C:\Foo\bin'
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