Запуск hyperV внутри контейнера windows docker - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть процесс, который выполняется в основном с powershell и в значительной степени зависит от модуля hyperV pw sh, который создается (во время выполнения скрипта) и запускает экземпляр hyper-v. Это делается для программной сборки машины windows с указанными c функциями, обновлениями и приложениями, а затем для захвата образа этой машины для последующего развертывания на физических устройствах. Мы хотим заключить этот процесс в контейнер, чтобы он мог выполняться более динамично, чем на физическом блоке, как сегодня.

Критически важно то, что нам нужно иметь возможность создавать и включать экземпляр hyper-v внутри контейнер. В настоящее время экспериментируем на win 1803 с файлом dockerFile ниже.

# note it doesn't necessarily need to be this image, I just picked it because it was easy
FROM microsoft/powershell:nanoserver-1803 AS powershell
COPY ./mainContainer/ c:/app/

, а затем для работы нужно pw sh, как показано ниже (основная проблема - отсутствие модуля hyperV pw sh):

New-VHD -SizeBytes 100GB -Path $vhdPath
New-VM -Name $VmName -Generation 2 -Path "$TempDirectory\$VmName" -VHDPath $vhdPath -Switch $switchName
Set-VMMemory -VMName $VmName -StartupBytes 4096MB -DynamicMemoryEnabled $false 
Add-VMScsiController -VMName $VmName 
Add-VMDvdDrive -VMName $VmName -ControllerNumber 1 -ControllerLocation 0 -Path $WindowsIsoPath 
Set-VMFirmware -VMName $VmName -FirstBootDevice $dvdDrive 
Start-VM -VMName $VmName 
$vm = Get-Vm $VMName
# then there's little loop waiting for the machine to turn off before continuing

Я пробовал Install-WindowsFeature и аналогичные, но всегда получаю сообщение об ошибке: «Термин« Install-WindowsFeature »не распознается как имя командлета, функции, файла сценария или работоспособной программы. " Я пробовал import-module servermanager, но это также дает «... не загружен, потому что не было допустимого файла модуля ...» Возможно, что основным (текущим) препятствием может быть импорт нового модуля в pw sh ( в контейнере), чтобы я мог включить функцию windows?

любой совет?

обновление: я обнаружил, что часть проблемы заключалась в том, что, похоже, наносервер не разрешает такие вещи, как dism, поэтому я обновил файл dockerFile:

FROM microsoft/powershell:windowsservercore-1803 AS powershell
COPY ./mainContainer/ c:/app/
RUN DISM /Online /Enable-Feature /All /FeatureName:Microsoft-Hyper-V 

, но теперь я получаю сообщение об ошибке:

Исходные файлы не найдены. Используйте опцию «Источник», чтобы указать расположение файлов, необходимых для восстановления функции. Для получения дополнительной информации об указании исходного местоположения см. http://go.microsoft.com/fwlink/?LinkId=243077.

. Кажется, мне нужно другое базовое изображение, не уверенное, есть ли такое, которое может включить hyper-V

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...