Перезапустите Docker контейнер во время процесса сборки - PullRequest
2 голосов
/ 18 февраля 2020

Мне нужно перезапустить контейнер Docker во время процесса сборки из-за dotnetfx. Dockerfile:

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

Но я сталкиваюсь с этой ошибкой:

Packages requiring reboot:
 - dotnetfx (exit code 3010) # <--- it means a reboot is needed!

Я попытался запустить обе команды в одном и том же RUN и добавить Restart-Computer между ними ( разделяется на \) и выполняет команду RUN после каждой команды установки, но когда я делаю это, похоже, что Docker выходные данные теряются.

Могу ли я перезапустить текущий контейнер во время процесса сборки без make Docker потерялись и продолжили процесс установки?


ОБНОВЛЕНИЕ 1

Попытался установить это dotnetfx перед выполнением последней команды, но я получил та же ошибка.

# Microsoft .NET Framework (https://chocolatey.org/packages/dotnetfx)
RUN choco install dotnetfx --confirm

Ошибка:

Packages requiring reboot:
 - dotnetfx (exit code 3010)

ОБНОВЛЕНИЕ 2 (Временное решение)

Мне удалось обойти это проблема с использованием базового образа с уже установленным NET:

FROM mcr.microsoft.com/dotnet/framework/sdk:4.8

1 Ответ

0 голосов
/ 18 февраля 2020

Одним из способов решения этой проблемы является использование многоэтапной сборки. На первом этапе вы можете установить двоичный файл, а на втором - скопировать двоичный файл и создать образ docker.

Вот как это можно сделать: https://docs.docker.com/develop/develop-images/multistage-build/

пример

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
...