Condividi tramite


Esempio avanzato per i contenitori

Il Dockerfile di esempio in Installare strumenti di compilazione in un contenitore utilizza sempre l'immagine microsoft/dotnet-framework:4.8 basata sull'immagine più recente di microsoft/windowsservercore e sul programma di installazione più recente di Visual Studio Build Tools. Se si pubblica questa immagine in un registro Docker per il pull da parte di altri utenti, questa immagine potrebbe essere adeguata per 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 è possibile installare in un contenitore in un secondo momento, è 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 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 buildtools2022:17.0 -t buildtools2022:latest -m 2GB .

È possibile facoltativamente passare uno o entrambi gli argomenti FROM_IMAGE e CHANNEL_URL usando l'opzione della riga di comando --build-arg per specificare un'immagine di base diversa o la posizione di un layout interno per bloccare un'immagine.

Suggerimento

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 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 o inviare un problema nel 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 (disponibile solo in inglese) per problemi relativi all'installazione.
  • Segnala i problemi del prodotto utilizzando lo strumento Segnala un problema che appare sia nell'Installer di Visual Studio che nell'IDE di Visual Studio. Se sei un amministratore IT e non hai installato Visual Studio, puoi inviare feedback per amministratori IT.
  • Suggerire una funzionalità, tenere traccia dei problemi del prodotto e trovare le risposte nella Visual Studio Developer Community.