Невозможно запустить контейнер Windows в Google Cloud - PullRequest
0 голосов
/ 02 сентября 2018

Я пытаюсь запустить контейнер 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

не получится. Это почему? И откуда эта ошибка "не удалось зарегистрировать слой"?

...