首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在Windows上启动ContainerD容器

无法在Windows上启动ContainerD容器
EN

Stack Overflow用户
提问于 2022-03-18 17:46:22
回答 1查看 1.6K关注 0票数 1

我一直跟随Gentle ContainerD on Windows Guide For You在我的Windows 10机器上安装ContainerD,但不知怎么我无法从本教程中开始任何示例。

命令是:crictl.exe runp --runtime runhcs-wcow-process .\pod-config.yaml错误是:

代码语言:javascript
复制
crictl.exe runp --runtime runhcs-wcow-process .\pod-config.yaml
time="2022-03-18T19:39:38+02:00" level=fatal msg="run pod sandbox: 
rpc error: code = Unknown desc = failed to setup network for sandbox \"7db0b08199861ffc0a68b869990c2ce1e2cee29df2579f9502ec584fbd5d2913\": plugin type=\"nat\" name=\"natContainerD\" failed (add): 
error creating endpoint hcnCreateEndpoint failed in Win32: IP address is either invalid or not part of any configured subnet(s). (0x803b001e) {\"Success\":false,\"Error\":\"IP address is either invalid or not part of any configured subnet(s). \",\"ErrorCode\":2151350302} : 
endpoint config &{ 7db0b08199861ffc0a68b869990c2ce1e2cee29df2579f9502ec584fbd5d2913_natContainerD 6160b2e0-4525-4bbc-b725-135c55fc741b  [] [{ 0}] { [] [] []} [{172.22.208.1 0.0.0.0/0 0}]  0 {2 0}}"

我想我没有配置我的cni网络,对吗?

下面是我在建立网络时所做的步骤:

代码语言:javascript
复制
$subnet='10.0.0.0/16'
$gateway='10.0.0.1'
New-HnsNetwork -Type NAT -AddressPrefix $subnet -Gateway $gateway -Name "natContainerD"

请注意,我无法创建名为nat的网络,因为它已经存在(从Docker ?)我把这个命名为natContainerD

然后配置cni本身(如上面的教程所示):

代码语言:javascript
复制
@"
{
    "cniVersion": "0.2.0",
    "name": "nat",
    "type": "nat",
    "master": "Internet",
    "ipam": {
        "subnet": "$subnet",
        "routes": [
            {
                "gateway": "$gateway"
            }
        ]
    },
    "capabilities": {
        "portMappings": true,
        "dns": true
    }
}
"@ | Set-Content "$env:ProgramFiles\containerd\cni\conf\0-containerd-nat.conf" -Force

但是,无论我在这个文件中更改了什么设置,我仍然无法启动任何容器:

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-23 17:54:01

下面是我试图在Windows 2022上安装容器的步骤。

  1. 安装Windows功能

附件-WindowsFeature特性容器,Hyper-V,Hyper-V-工具,Hyper PowerShell -Restart -Restart

  1. 安装containerd 1.6.1下载containerd 1.6.1 1.6.1 curl.exe -LO https://github.com/containerd/containerd/releases/download/v1.6.1/containerd-1.6.1-windows-amd64.tar.gz tar xvf containerd 1.6.1-1.6.1-windows-amd64.tar.gz mkdir -force "C:\Program \containerd 1.6.1“mv ./ bin /* "C:\Program \C”Remove-Item bin。"C:\Program Files\containerd\containerd.exe“配置缺省值-文件"C:\Program Files\containerd\config.toml”-Encoding ascii Add "$Env:ProgramFiles\containerd\containerd.exe“。"$Env:ProgramFiles\containerd\containerd.exe“--注册-服务启动-服务容器$env:PATH = "C:\Program \Start;”+ $env:PATH

  1. 配置容器网络

mkdir -force "C:\Program \cni\cni\bin“mkdir -force "C:\Program \cni\cni\conf”

windows-container-networking-cni-amd64-v0.2.0.zip下载microsoft/windows-container-networking文件

windows-container-networking-cni-amd64-v0.2.0.zip curl.exe -LO https://github.com/microsoft/windows-container-networking/releases/download/v0.2.0/windows-container-networking-cni-amd64-v0.2.0.zip展开-存档-LO -DestinationPath "C:\Program \curl.exe\cni\bin“-Force删除-项windows-container-networking-cni-amd64-v0.2.0.zip

您必须从microsoft/windows-container-networking回购下载源代码,并从源代码中构建自己的nat.exe。这是因为版本中的二进制版本已经过时了。它不会在WS2022中工作。我创建了一个问题here.

创建nat网络

curl.exe -LO https://raw.githubusercontent.com/microsoft/SDN/master/Kubernetes/windows/hns.psm1 Import ./hns.psm1 $subnet="10.0.0.0/16“$gateway="10.0.0.1”New-HNSNetwork -Type -AddressPrefix $subnet -Gateway $gateway -Name " NAT“{ "cniVersion":"0.2.0","name":"nat","type":"nat",”$gateway=“:”以太网“,"ipam":{“子网”:"$subnet",“路由”:{“网关”:"$gateway“},”功能“:{ "portMappings":true,"dns":true } "@ AC.26 Set-Content "C:\Program Files\containerd\cni\conf\0-containerd-nat.conf“-Force

使用ctr运行容器

  1. 检查Windows版本

cmd /c ver

Microsoft版本10.0.20348.587

  1. 拉出mcr.microsoft.com/windows/nanoserver:ltsc2022hello-world图像

mcr.microsoft.com/windows/nanoserver:ltsc2022 ctr.exe图像拉出ctr.exe

  1. 运行容器

ctr.exe运行mcr.microsoft.com/windows/nanoserver:ltsc2022helcmd /c echo hello容器rm Hello

registry.hub.docker.com/library/hello-world:nanoserver-ltsc2022 ctr.exe run -rm ctr.exe hello-world

Rmmcr.microsoft.com/windows/nanoserver:ltsc2022 test curl.exe -s -s

使用crictl运行Pod和容器

  1. 安装crictl工具

Files\containerd" curl.exe -LO https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.23.0/crictl-v1.23.0-windows-amd64.tar.gz tar xvf crictl v1.23.0-windows-amd64.tar.gz mv crictl.exe "C:\Program

  1. 配置crictl配置

mkdir -Force "$home.crictl“@运行时-终结点:npipe://./$home.crictl\crictl.yaml/$home.crictl\crictl.yaml图像-终结点:npipe://.$home.crictl\crictl.yaml/ -Force crictl.exe

  1. Pull Pause container image (k8s.gcr.io/pause:3.6)

板球拉k8s.gcr.io/pause:3.6

  1. 创建沙箱/ Pod

@{“元数据”:{“名称”:"hello-world-sandbox“、”命名空间“:”默认“、”尝试“:1、"uid":"hdishd83djaidwnduwk28bcsb”}、"log_directory":"/tmp“} "@酶集-内容”po-config.json“-Force mkdir C:\tmp $POD_ID=”

  1. 创建容器

@{“元数据”:{ "name":"hello-world:nanoserver-ltsc2022“},"image":{ "image":"hello-world:nanoserver-ltsc2022”},"log_path":"hello-world.0.log“} "@ Set-Content”容器-config.json“-Force $CONTAINER_ID=。

  1. 启动容器

板球启动$CONTAINER_ID

  1. 检查容器中的日志

crictl日志$CONTAINER_ID

码头来的你好!此消息显示您的安装工作正常。为了生成此消息,Docker采取了以下步骤: 1. Docker客户端联系了Docker守护进程。2. Docker守护进程从Docker Hub中提取"hello-world“图像。(windows-a 64,nanoserver-ltsc2022) 3. Docker守护进程从该映像创建了一个新容器,该映像运行生成当前正在读取的输出的可执行文件。4. Docker守护进程将该输出流到Docker客户端,后者将其发送到您的终端。要尝试更有雄心的东西,您可以运行Windows容器: PS C:> docker run -it mcr.microsoft.com/windows/servercore:ltsc2022 powershell共享映像,自动化工作流,更多使用免费Docker:https://hub.docker.com/来获取更多示例和想法,请访问:

  1. 检查邮袋和容器

蟋蟀荚,蟋蟀ps -a

  1. 删除容器和Pod

板球rm $CONTAINER_ID蟋蟀停止$POD_ID蟋蟀rmp $POD_ID

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71531188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档