Я пытаюсь запустить контейнер Windows в облаке Google и получаю эту ошибку ...
C: \ Program Files \ Docker \ docker.exe: не удалось зарегистрировать слой: ошибка повторного выполнения: состояние выхода 1: выход: ProcessUtilityVMImage \? \ C: \ ProgramData \ docker \ windowsfilter \ 0a04539f9f077acf8dbc35f493c70f4ba3f75a65aff70ftilityMB201868: 682: 0 не могу найти указанный путь.
Нет ничего плохого в контейнере. Я запустил один и тот же контейнер на своем устройстве для разработки Windows, Azure и, наконец, на AWS без проблем.
Dockerfile выглядит следующим образом ...
FROM microsoft/dotnet-framework:4.7.2-runtime
WORKDIR /.
COPY License/ /License/
COPY Input/ /Input/
COPY Engine/ /Engine/
COPY redist/ /Engine/
COPY Scripts/ /
RUN mkdir Output
CMD ["powershell.exe","./runxx.ps1"]
Я создал 3 экземпляра виртуальных машин на платформе Google Cloud, сначала с Windows Server 1803 с контейнерами, затем с Windows Server 1709 с контейнерами и, наконец, с Windows Server Datacenter 2016 Core.
1803 был полным провалом. Установленный докер выполнял контейнеры Linux. Поэтому, когда вы тянете контейнер с Windows, вы получаете странную ошибку «Неизвестный блоб ...». Потребовалось время, чтобы понять это. Кажется, нет способа переключаться на контейнеры Windows через командную строку.
ОБНОВЛЕНИЕ: Я снова попробовал образ 1803, и контейнер Windows теперь работает нормально. Не уверен, что, когда не так с первой 1803 VM, которую я создал. Я все еще удивляюсь, почему я не смог заставить работать Windows Server 2016.
Я продолжил работу с 1709. Docker запускал контейнеры Windows, но когда я попытался запустить контейнер, я получил сообщение об ошибке, указывающее, что для моего образа докера требуется Windows Server 2016.
Итак, наконец, я создал виртуальную машину с Windows Server 2016 Core. Нет оптимизированной для контейнера версии, чтобы мне пришлось устанавливать Docker самостоятельно. Я внимательно следил за сценарием https://cloud.google.com/compute/docs/containers/#docker_on_windows, который включает в себя довольно много нелепых решений для известных проблем. Вкратце нужно установить докер с
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name docker -ProviderName DockerMsftProvider
Тогда обходные пути для известных проблем ...
netsh netkvm setparam 0 *RscIPv4 0
reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters /v DisabledComponents /t REG_DWORD /d 0x0 /f
И после всего этого он все еще не работает и выдает ошибку, указанную вверху.
Что я делаю не так? Я должен сделать вывод, что Google Cloud просто не готов к запуску контейнеров Windows.
РЕДАКТИРОВАТЬ: В ходе дальнейших исследований я решил, что я могу запустить контейнер Windows, созданный из наносервера Windows, но не тот, который построен из полной .NET Framework.
т.е. если мой Dockerfile содержит:
FROM microsoft/nanoserver
контейнер будет работать. Если он содержит
FROM microsoft/dotnet-framework:3.5-runtime
или
FROM microsoft/dotnet-framework:4.7.2-runtime
не получится. Это почему? И откуда эта ошибка "не удалось зарегистрировать слой"?