我在 GCP 上运行 Windows Server 2022。我按照此处所述安装了 docker:https://cloud.google.com/compute/docs/containers#docker_on_windows
也就是说,我这样做了:
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name docker -ProviderName DockerMsftProvider
Restart-Computer -Force
然而,当我尝试运行 Linux 映像时,我得到了
PS C:\Windows\system32> docker run busybox ls
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
docker: no matching manifest for windows/amd64 10.0.20348 in the manifest list entries.
See 'docker run --help'.
PS C:\Windows\system32> docker run --rm --platform linux alpine ls
Unable to find image 'alpine:latest' locally
docker: Error response from daemon: unsupported os linux.
See 'docker run --help'.
我究竟做错了什么?
编辑。我无法在 GCP 上启用 hyper-V。我的处理器是 Intel(R) Xeon(R) CPU @ 2.80GHz 2.80 GHz 它不应该允许嵌套虚拟化吗
看来我需要在 gcp 中启用嵌套虚拟化。为此,我需要将enableNestedVirtualization
字段设置为true
。有关于如何使用 gcloud api 执行此操作的描述,但我无法让我的客户这样做。有没有办法在 WebUI 或 VPS 本身中执行此操作?
编辑 2. 这是否意味着我无法从 Windows 运行 Linux Docker 容器?或者 Docker 是一个特例?
L1 VM 具有以下限制:您必须运行基于 Linux 的操作系统;不能使用 Windows Server 映像。
https://cloud.google.com/compute/docs/instances/nested-virtualization/overview
答案1
因此,关于您要做的事情有以下几点:
- Windows 上的 Linux 容器(客户端 10/11 或服务器)在生产中不受支持。您可以出于开发/测试目的运行它。
- Linux 容器需要 WSL 才能在 Windows 上运行。具体来说,对于 Windows Server 2022,需要 WSL2。我在这里写了一篇关于此内容的博客:https://techcommunity.microsoft.com/t5/itops-talk-blog/using-wsl-2-on-windows-server-2022-to-run-linux-containers/ba-p/3624745
- WSL 2 本质上运行 Linux VM 并公开 CLI 和服务。要使其在任何云上运行,您需要启用嵌套虚拟化。