Windows 容器网络

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

重要

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

基本网络体系结构

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

说明 Windows 网络堆栈

首次运行 Docker 引擎时,它将创建默认 NAT 网络“nat”,该网络使用内部 vSwitch 和名为 WinNATWindows 组件的 Windows 组件。 如果主机上存在通过 PowerShell 或 Hyper-V 管理器创建的任何预先存在的外部 vSwitch,则它们也可用于使用透明网络驱动程序的 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 开始,Windows 容器对 IPv6 网络具有以下支持:
    • 附加到 l2bridge 网络的容器支持 IPv6 堆栈。
    • 附加到透明网络的容器支持使用具有自分配 IP 地址的 IPv6 进行通信,但不支持 HNS 提供的 IP 地址分配和其他网络服务,例如负载均衡和 ACL。
  • 附加到 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