在 Windows Server 2019 上运行 dapr 遇到的 docker 问题

在 Windows Server 2019 上安装 dapr ,安装成功后有一段提示文字

Ensure that Docker Desktop is set to Linux containers mode when you run Dapr in self hosted mode.

开始时没注意到这个提示,然后安装 docker engine

Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name docker -ProviderName DockerMsftProvider

接着运行 dapr init ,报下面的错误

docker: no matching manifest for windows/amd64 10.0.17763 in the manifest list entries.

查找资料后得知 docker engine 默认是 Windows container 模式,解决上面的错误需要切换到 Linux container 模式,这时才注意到安装 dapr 时的提示。

通过 docker desktop 切换到 Linux container 模式,但 docker engine 总是启动失败,报错如下:

The Virtual Machine Management Service failed to start the virtual machine 'DockerDesktopVM' because one of the Hyper-V components is not running

折腾一阵,没有解决,后来通过 Run Docker Containers on Windows Server 2019 知道原来需要安装 preview 版 Docker EE。

通过下面的一系列 powershell 命令安装 preview 版 Docker EE 之后,支持 Linux container 模式终于成功启动。

Install-Module -Name DockerMsftProvider -Repository PSGallery -Force

Uninstall-Package -Name docker -ProviderName DockerMSFTProvider
Install-Module DockerProvider
Install-Package Docker -ProviderName DockerProvider -RequiredVersion preview
Restart-Computer -Force
[Environment]::SetEnvironmentVariable("LCOW_SUPPORTED", "1", "Machine")
Restart-Service docker

但是运行 dapr init 出现新的错误

docker: failed to register layer: failed to start service utility VM (applydiff 88e57cc977280a42ef93829fad29a6ffbe1be1320278764f77575546056c1800): container 88e57cc977280a42ef93829fad29a6ffbe1be1320278764f77575546056c1800_svm encountered an error during CreateContainer: failure in a Windows system call: The virtual machine could not be started because a required feature is not installed. (0xc0370102) extra info: {"SystemType":"container","Name":"88e57cc977280a42ef93829fad29a6ffbe1be1320278764f77575546056c1800_svm","Layers":null,"HvPartition":true,"HvRuntime":{"ImagePath":"C:\Program Files\Linux Containers","LinuxInitrdFile":"initrd.img","LinuxKernelFile":"bootx64.efi"},"ContainerType":"linux","TerminateOnLastHandleClosed":true}.

运行 ubuntu 容器也是同样的错误

docker run -it --rm ubuntu /bin/bash

又折腾一阵,通过 Azure VM Docker CreateContainer Error (0xc0370102) 知道原来需要云服务器支持 Nested Virtualization,看来当前使用的百度云服务器不支持。

换到阿里云试试,阿里云提供了专门的“Windows Server 2019 with Container 数据中心版”镜像,用这个镜像也未能成功运行 Linux container。

网上查了一下,目前好像只有微软的 azure 与 google 的 gcd 支持 Nested Virtualization。

posted @ 2021-11-18 21:20  dudu  阅读(2086)  评论(4编辑  收藏  举报