Je dois redémarrer le conteneur Docker pendant le processus de construction en raison de dotnetfx
. Dockerfile
:
FROM mcr.microsoft.com/dotnet/framework/sdk:4.8
Mais je suis confronté à cette erreur:
Packages requiring reboot: - dotnetfx (exit code 3010)
J'ai essayé d'exécuter les deux commandes dans le même RUN
et d'ajouter Restart-Computer
entre elles (séparer par \
) et d'exécuter une commande RUN
après chaque commande d'installation, mais quand je le fais, il semble que la sortie de Docker soit perdue.
Puis-je redémarrer le conteneur actuel pendant le processus de construction sans perdre Docker et conserver le processus d'installation?
MISE À JOUR 1
dotnetfx
essayé d'installer ce dotnetfx
avant d'exécuter la dernière commande mais j'obtiens la même erreur.
# Microsoft .NET Framework (https://chocolatey.org/packages/dotnetfx) RUN choco install dotnetfx --confirm
Erreur:
Packages requiring reboot: - dotnetfx (exit code 3010) # <--- it means a reboot is needed!
MISE À JOUR 2 (SOLUTION DE CONTOURNEMENT)
J'ai réussi à contourner ce problème en utilisant une image de base avec .NET déjà installé:
FROM mcr.microsoft.com/windows/servercore:ltsc2019 SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] # Install Chocolatey RUN Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) # Universal Windows Platform build tools workload for Visual Studio 2019 Build Tools (https://chocolatey.org/packages/visualstudio2019-workload-universalbuildtools#dependencies) RUN choco install visualstudio2019-workload-universalbuildtools --package-parameters "--includeOptional" --confirm
3 Réponses :
une façon de résoudre ce problème consiste à utiliser la génération en plusieurs étapes. Dans la première étape, vous pouvez installer le binaire et dans la seconde, vous copiez le binaire et construisez l'image du docker.
Voici comment procéder: https://docs.docker.com/develop/develop-images/multistage-build/
exemple
FROM mcr.microsoft.com/windows/servercore:ltsc2019 as baseimage SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] # Install Chocolatey RUN Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) # Universal Windows Platform build tools workload for Visual Studio 2019 Build Tools (https://chocolatey.org/packages/visualstudio2019-workload-universalbuildtools#dependencies) FROM baseimage RUN choco install visualstudio2019-workload-universalbuildtools --package-parameters "--includeOptional" --confirm
J'ai un peu compris la construction en plusieurs étapes, mais pouvez-vous me donner un exemple basé sur mon Dockerfile? Je le pose car c'est lors de la dernière commande que cette erreur se produit, donc je ne suis pas sûr que cette approche aiderait ...
est le fichier ci-dessus est le fichier entier ou il y a d'autres instructions?
J'ai mis à jour la réponse, vous devrez peut-être diviser cela en plusieurs étapes
Comme je l'ai déjà dit, le problème de redémarrage se pose pendant que le RUN choco install visualstudio2019-workload-universalbuildtools --package-parameters "--includeOptional" --confirm
n'est pas exécuté entre la commande que vous avez divisée ...
Si vous essayez d'exécuter cette commande seule, vous obtiendrez la même erreur RUN choco install dotnetfx --confirm
OK, on dirait que vous essayez d'installer VisualStudio 2019. C'est ainsi que j'ai résolu le problème. La première approche consiste à utiliser la construction en plusieurs étapes comme indiqué ci-dessus:
FROM mcr.microsoft.com/windows/servercore:1809 RUN powershell -NoProfile -ExecutionPolicy Bypass -Command \ Invoke-WebRequest "https://aka.ms/vs/16/release/vs_community.exe" \ -OutFile "%TEMP%\vs_community.exe" -UseBasicParsing RUN "%TEMP%\vs_community.exe" --quiet --wait --norestart --noUpdateInstaller \ --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 \ --add Microsoft.VisualStudio.Component.Windows10SDK.18362
Le problème avec cette approche est que le package dotnetfx semble être cassé - certains autres packages ne parviennent pas à s'installer en raison de l'absence de la bibliothèque «alink.dll». Aussi, je n'ai pas vérifié que --ignore-package-exit-codes = 3010 supprime une seule erreur ou toutes les erreurs (choco doc ne dit rien sur la possibilité de spécifier le code exact).
La deuxième approche consiste à installer Visual Studio à partir du site Web MS (fonctionne parfaitement):
FROM mcr.microsoft.com/windows/servercore:1809 as baseimage RUN powershell -NoProfile -ExecutionPolicy Bypass -Command \ $Env:chocolateyVersion = '0.10.15' ; \ $Env:chocolateyUseWindowsCompression = 'false' ; \ "[Net.ServicePointManager]::SecurityProtocol = \"tls12, tls11, tls\"; iex ((New-Object System.Net.WebClient).DownloadString('http://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin" # suppress the "restart required" error code (3010) RUN choco install -y --ignore-package-exit-codes=3010 dotnetfx # emulate the required restart after installing dotnetfx FROM baseimage RUN choco install -y visualstudio2019buildtools --package-parameters \ "--norestart --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64"
Notez que les composants peuvent être différents dans votre cas.
Le redémarrage n'est pas nécessaire dans le docker. La seule chose à faire est de dire à choco de ne pas quitter avec un code de sortie différent de zéro. Ceci est fait par --ignore-package-exit-codes=3010
.
Ce qui suit a fonctionné pour moi:
FROM mcr.microsoft.com/windows/servercore:1809-amd64 SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] RUN ["powershell","Set-ExecutionPolicy Bypass -Scope Process -Force;","iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))"] RUN choco install dotnetfx -y --version 4.8.0.20190930 --ignore-package-exit-codes=3010 # see https://docs.microsoft.com/en-us/visualstudio/install/workload-component-id-vs-build-tools?vs-2019&view=vs-2019 for a list of available workloads and components RUN choco install visualstudio2019buildtools -y --version 16.8.1.0 --params \"--add Microsoft.VisualStudio.Workload.ManagedDesktopBuildTools --add Microsoft.VisualStudio.Workload.NetCoreBuildTools\" RUN setx /M PATH $($Env:PATH+';C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/MSBuild/Current/bin/;c:/Program Files (x86)/Microsoft SDKs/Windows/v10.0A/bin/NETFX 4.8.0 Tools/')
Je ne connais pas la réponse à votre question, mais une autre option serait d'essayer d'installer ce package sur votre ordinateur local et de copier les fichiers exécutables dans le conteneur avec la commande COPY dockerfile. Mieux encore, trouvez peut-être une image docker avec le logiciel déjà installé.
@BrunoFarias merci mais ce n'est pas une option une fois qu'il y a une configuration dynamique pour ce Dockerfile, donc j'aurais besoin de comprendre cela via Dockerfile ...