Esempio avanzato per i contenitori
Il Dockerfile di esempio in Installare strumenti di compilazione in un contenitore usa sempre l'immagine microsoft/dotnet-framework:4.8 basata sull'immagine microsoft/windowsservercore più recente e sul programma di installazione più recente di Visual Studio Build Tools. Se si pubblica questa immagine in un registro Docker affinché altri utenti possano scaricarla, questa immagine potrebbe essere adatta a molti scenari. Tuttavia, in pratica, è più comune essere specifico dell'immagine di base usata, dei file binari scaricati e delle versioni degli strumenti installate.
Nell'esempio seguente Dockerfile usa un tag di versione specifico dell'immagine microsoft/dotnet-framework. L'uso di un tag specifico per un'immagine di base è comune e consente di ricordare facilmente che la compilazione o la ricompilazione di immagini ha sempre la stessa base.
Nota
Non è possibile installare Visual Studio in microsoft/windowsservercore:10.0.14393.1593 o in qualsiasi immagine basata su di essa, che presenta problemi noti durante l'avvio del programma di installazione in un contenitore. Per altre informazioni, vedere Problemi noti per i contenitori.
Nell'esempio seguente viene scaricata la versione più recente di Build Tools. Se si vuole usare una versione precedente di Build Tools che si può installare successivamente in un contenitore, è necessario prima creare e mantenere un layout.
Installare lo script
Per raccogliere i log quando si verifica un errore di installazione, creare uno script batch denominato "Install.cmd" nella directory di lavoro che include il contenuto seguente:
@if not defined _echo echo off
setlocal enabledelayedexpansion
call %*
if "%ERRORLEVEL%"=="3010" (
exit /b 0
) else (
if not "%ERRORLEVEL%"=="0" (
set ERR=%ERRORLEVEL%
call C:\TEMP\collect.exe -zip:C:\vslogs.zip
exit /b !ERR!
)
)
exit /b 0
Dockerfile
Nella directory di lavoro creare il "Dockerfile" con il contenuto seguente:
# escape=`
# Use a specific tagged image. Tags can be changed, though that is unlikely for most images.
# You could also use the immutable tag @sha256:324e9ab7262331ebb16a4100d0fb1cfb804395a766e3bb1806c62989d1fc1326
ARG FROM_IMAGE=mcr.microsoft.com/windows/servercore:ltsc2019
FROM ${FROM_IMAGE}
# Restore the default Windows shell for correct batch processing.
SHELL ["cmd", "/S", "/C"]
# Copy our Install script.
COPY Install.cmd C:\TEMP\
# Download collect.exe in case of an install failure.
ADD https://aka.ms/vscollect.exe C:\TEMP\collect.exe
# Use the latest release channel. For more control, specify the location of an internal layout.
ARG CHANNEL_URL=https://aka.ms/vs/16/release/channel
ADD ${CHANNEL_URL} C:\TEMP\VisualStudio.chman
RUN `
# Download the Build Tools bootstrapper.
curl -SL --output vs_buildtools.exe https://aka.ms/vs/16/release/vs_buildtools.exe `
`
# Install Build Tools with the Microsoft.VisualStudio.Workload.AzureBuildTools workload, excluding workloads and components with known issues.
&& (call C:\TEMP\Install.cmd vs_buildtools.exe --quiet --wait --norestart --nocache install `
--installPath "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\BuildTools" `
--channelUri C:\TEMP\VisualStudio.chman `
--installChannelUri C:\TEMP\VisualStudio.chman `
--add Microsoft.VisualStudio.Workload.AzureBuildTools `
--remove Microsoft.VisualStudio.Component.Windows10SDK.10240 `
--remove Microsoft.VisualStudio.Component.Windows10SDK.10586 `
--remove Microsoft.VisualStudio.Component.Windows10SDK.14393 `
--remove Microsoft.VisualStudio.Component.Windows81SDK) `
`
# Cleanup
&& del /q vs_buildtools.exe
# Define the entry point for the Docker container.
# This entry point starts the developer command prompt and launches the PowerShell shell.
ENTRYPOINT ["C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\Common7\\Tools\\VsDevCmd.bat", "&&", "powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]
# escape=`
# Use the latest Windows Server Core 2019 image.
ARG FROM_IMAGE=mcr.microsoft.com/windows/servercore:ltsc2019
FROM ${FROM_IMAGE}
# Restore the default Windows shell for correct batch processing.
SHELL ["cmd", "/S", "/C"]
# Copy our Install script.
COPY Install.cmd C:\TEMP\
# Download collect.exe in case of an install failure.
ADD https://aka.ms/vscollect.exe C:\TEMP\collect.exe
# Use the latest release channel. For more control, specify the location of an internal layout.
ARG CHANNEL_URL=https://aka.ms/vs/17/release/channel
ADD ${CHANNEL_URL} C:\TEMP\VisualStudio.chman
RUN `
# Download the Build Tools bootstrapper.
curl -SL --output vs_buildtools.exe https://aka.ms/vs/17/release/vs_buildtools.exe `
`
# Install Build Tools with the Microsoft.VisualStudio.Workload.AzureBuildTools workload, excluding workloads and components with known issues.
&& (call C:\TEMP\Install.cmd vs_buildtools.exe --quiet --wait --norestart --nocache install `
--installPath "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\BuildTools" `
--channelUri C:\TEMP\VisualStudio.chman `
--installChannelUri C:\TEMP\VisualStudio.chman `
--add Microsoft.VisualStudio.Workload.AzureBuildTools `
--remove Microsoft.VisualStudio.Component.Windows10SDK.10240 `
--remove Microsoft.VisualStudio.Component.Windows10SDK.10586 `
--remove Microsoft.VisualStudio.Component.Windows10SDK.14393 `
--remove Microsoft.VisualStudio.Component.Windows81SDK) `
`
# Cleanup
&& del /q vs_buildtools.exe
# Define the entry point for the Docker container.
# This entry point starts the developer command prompt and launches the PowerShell shell.
ENTRYPOINT ["C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\Common7\\Tools\\VsDevCmd.bat", "&&", "powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]
Eseguire il comando seguente per compilare l'immagine nella directory di lavoro corrente:
docker build -t buildtools2019:16.0.28714.193 -t buildtools2019:latest -m 2GB .
docker build -t buildtools2022:17.0 -t buildtools2022:latest -m 2GB .
Facoltativamente, passare gli argomenti FROM_IMAGE
e/o CHANNEL_URL
usando l'opzione da linea di comando --build-arg
per specificare un'immagine di base diversa o la posizione di un layout interno per mantenere un'immagine invariata.
Mancia
Per un elenco di carichi di lavoro e componenti, vedere la directory del componente Visual Studio Build Tools.
Diagnosi degli errori di installazione
Questo esempio scarica strumenti specifici e verifica che gli hash corrispondano. Scarica anche l'utilità di raccolta log più recente di Visual Studio e .NET in modo che, se si verifica un errore di installazione, è possibile copiare i log nel computer host per analizzare l'errore.
> docker build -t buildtools2019:16.0.28714.193 -t buildtools2019:latest -m 2GB .
Sending build context to Docker daemon
...
Step 8/10 : RUN C:\TEMP\Install.cmd C:\TEMP\vs_buildtools.exe --quiet --wait --norestart --nocache ...
---> Running in 4b62b4ce3a3c
The command 'cmd /S /C C:\TEMP\Install.cmd C:\TEMP\vs_buildtools.exe ...' returned a non-zero code: 1603
> docker cp 4b62b4ce3a3c:C:\vslogs.zip "%TEMP%\vslogs.zip"
> docker build -t buildtools2022:17.0 -t buildtools2022:latest -m 2GB .
Sending build context to Docker daemon
...
Step 8/10 : RUN C:\TEMP\Install.cmd C:\TEMP\vs_buildtools.exe --quiet --wait --norestart --nocache ...
---> Running in 4b62b4ce3a3c
The command 'cmd /S /C C:\TEMP\Install.cmd C:\TEMP\vs_buildtools.exe ...' returned a non-zero code: 1603
> docker cp 4b62b4ce3a3c:C:\vslogs.zip "%TEMP%\vslogs.zip"
Al termine dell'esecuzione dell'ultima riga, aprire "%TEMP%\vslogs.zip" nel computer, oppure segnalare un problema sul sito Web Developer Community.
Supporto o risoluzione dei problemi
A volte, le cose possono andare storte. Se l'installazione di Visual Studio non riesce, vedere Risolvere i problemi di installazione e aggiornamento di Visual Studio per indicazioni dettagliate.
Ecco alcune altre opzioni di supporto:
- Usare l'opzione di supporto della chat (solo inglese) per i problemi correlati all'installazione.
- Segnala i problemi del prodotto usando lo strumento Segnala un problema visualizzato sia nel programma di installazione di Visual Studio che nell'IDE di Visual Studio. Se si è un amministratore IT e non è installato Visual Studio, è possibile inviare feedback dell'amministratore IT.
- Suggerire una funzionalità, tenere traccia dei problemi del prodotto e trovare le risposte nella Visual Studio Developer Community.