У меня есть процесс, который выполняется в основном с 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