Windows 容器网络

适用范围:Windows Server 2022、Windows Server 2019、Windows Server 2016

重要

有关 常规 Docker 网络 命令、选项和语法,请参阅 Docker 容器网络。 除了 不受支持的功能和网络选项中描述的任何情况外,所有 Docker 网络命令在 Windows 上都受支持,其语法与 Linux 上的语法相同。 但是,Windows 和 Linux 网络堆栈不同,因此你会发现某些 Linux 网络命令 (,例如, ifconfig Windows 不支持) 。

基本网络体系结构

本主题概述 Docker 如何在 Windows 上创建和管理主机网络。 关于网络,Windows 容器的作用类似于虚拟机。 每个容器都有一个连接到 Hyper-V 虚拟交换机 (vSwitch) 的虚拟网络适配器 (vNIC)。 Windows 支持可通过 Docker 创建的五种不同的 网络驱动程序或模式nat覆盖透明l2bridgel2tunnel。 根据物理网络基础结构和单 VS 多主机网络要求,应该选择最符合你需要的网络驱动程序。

演示 Windows 网络堆栈

Docker 引擎首次运行时,它将创建默认 NAT 网络“nat”,该网络使用内部 vSwitch 和名为 的 WinNATWindows 组件。 如果主机上有通过 PowerShell 或 Hyper-V 管理器创建的任何预先存在的外部 vSwitch,则也可以使用 transparent 网络驱动程序将它们提供给 Docker,并且在你运行 docker network ls 命令时可以看到它们。

演示 Docker 网络 ls PowerShell 命令

  • 内部 vSwitch 是未直接连接到容器主机上的网络适配器的 vSwitch。
  • 外部 vSwitch 是直接连接到容器主机上的网络适配器的 vSwitch。

演示 Get-VMSwitch PowerShell 命令

“Nat”网络是在 Windows 上运行的容器的默认网络。 任何在 Windows 上运行但未使用任何标志或参数来实现特定网络配置的容器都将连接到默认的“nat”网络,并且将被自动分配一个“nat”网络内部前缀 IP 范围内的 IP 地址。 用于“nat”的默认内部 IP 前缀是 172.16.0.0/16。

容器网络管理与主机网络服务

主机网络服务 (HNS) 和主机计算服务 (HCS) 共同创建容器并将终结点连接到网络。 可以通过 HNS Powershell 帮助程序模块与 HNS 交互。

网络的创建

  • HNS 为每个网络创建一个 Hyper-V 虚拟交换机
  • HNS 根据需要创建 NAT 和 IP 池

终结点创建

  • HNS 为每个容器终结点创建网络命名空间
  • HNS/HCS 将 v(m)NIC 放入网络命名空间内
  • HNS 创建 (vSwitch) 端口
  • HNS 将 IP 地址、DNS 信息、路由等(受制于网络模式)分配给终结点

创建策略

  • 对于默认网络地址转换 (NAT) 网络,HNS 使用相应的 Windows 防火墙允许规则创建 WinNAT 端口转发规则和映射。
  • 对于所有其他网络,HNS 利用虚拟筛选平台 (VFP) 创建策略,包括负载均衡、ACL 和封装。 有关 HNS API 和架构的详细信息,请参阅 适用于 VM 和容器的主机计算网络 (HCN) 服务 API

说明 HNS 管理堆栈

不受支持的功能和网络选项

Windows 目前 不支持 以下网络选项:

  • 从 Windows Server 2022 开始,附加到 l2bridge 网络的 Windows 容器支持 IPv6 堆栈。 但是,附加到 NAT 和覆盖网络的 Windows 容器不支持通过 IPv6 堆栈进行通信。
  • 通过 IPsec 加密的容器通信。
  • 主机模式 网络。
  • 通过透明网络驱动程序在虚拟化 Azure 基础结构上建立网络。
命令 不支持的选项
docker run --ip6, --dns-option
docker network create --aux-address, --internal, --ip-range, --ipam-driver, --ipam-opt, --ipv6, --opt encrypted