Дополнительные параметры сети в Windows
Область применения: Windows Server 2025, Windows Server 2022, Windows Server 2019, Windows Server 2016
Поддерживаются несколько вариантов сетевого драйвера для использования возможностей и функций Windows.
Переключение внедренной команды с помощью Docker Networks
Применимо ко всем сетевым драйверам
Вы можете воспользоваться преимуществами switch Embedded Teaming при создании сетей узлов контейнеров для Docker, указав несколько сетевых адаптеров, разделённых запятыми, параметром -o com.docker.network.windowsshim.interface
.
C:\> docker network create -d transparent -o com.docker.network.windowsshim.interface="Ethernet 2", "Ethernet 3" TeamedNet
Настройка идентификатора виртуальной локальной сети
Применяется к прозрачным и сетевым драйверам L2Bridge
Чтобы задать идентификатор виртуальной локальной сети, используйте этот параметр, -o com.docker.network.windowsshim.vlanid=<VLAN ID>
к команде docker network create
. Например, можно использовать следующую команду для создания прозрачной сети с идентификатором виртуальной ЛС 11:
C:\> docker network create -d transparent -o com.docker.network.windowsshim.vlanid=11 MyTransparentNetwork
При настройке идентификатора виртуальной локальной сети вы устанавливаете изоляцию виртуальной локальной сети для всех конечных точек контейнеров, которые будут подключены к этой сети.
Убедитесь, что сетевой адаптер узла (физический) находится в режиме магистрали, чтобы включить обработку всего помеченного трафика с помощью vSwitch с портом виртуальной сетевой карты (конечной точки контейнера) в режиме доступа в правильной виртуальной локальной сети.
Указание политики исходящего NAT для сети
Применимо к сетям l2bridge
Обычно при создании сети контейнеров l2bridge
с помощью docker network create
конечные точки контейнеров не применяют политику HNS OutboundNAT, что приводит к тому, что контейнеры не могут достичь внешнего мира. Если вы создаете сеть, вы можете использовать параметр -o com.docker.network.windowsshim.enable_outboundnat=<true|false>
для применения политики OutboundNAT HNS, чтобы предоставить контейнерам доступ к внешнему миру.
C:\> docker network create -d l2bridge -o com.docker.network.windowsshim.enable_outboundnat=true MyL2BridgeNetwork
Если имеется набор назначений (например, подключение контейнера к контейнерам), в которых мы не хотим использовать NAT, необходимо также указать список исключений.
C:\> docker network create -d l2bridge -o com.docker.network.windowsshim.enable_outboundnat=true -o com.docker.network.windowsshim.outboundnat_exceptions=10.244.10.0/24
Укажите имя сети для службы HNS
Применимо ко всем сетевым драйверам
Обычно при создании сети контейнеров с помощью docker network create
имя сети, которое вы указываете, используется службой Docker, но не службой HNS. Если вы создаете сеть, можно указать имя, которое будет присвоено ей службой HNS с помощью опции -o com.docker.network.windowsshim.networkname=<network name>
в команде docker network create
. Например, для создания прозрачной сети с именем, указанным в службе HNS, можно использовать следующую команду:
C:\> docker network create -d transparent -o com.docker.network.windowsshim.networkname=MyTransparentNetwork MyTransparentNetwork
Привязка сети к определенному сетевому интерфейсу
Применяется ко всем сетевым драйверам, кроме nat.
Чтобы привязать сеть (подключенную через Hyper-V виртуальный коммутатор) к конкретному сетевому интерфейсу, используйте этот параметр, -o com.docker.network.windowsshim.interface=<Interface>
к команде docker network create
. Например, для создания прозрачной сети, подключенной к сетевому интерфейсу Ethernet 2, можно использовать следующую команду:
C:\> docker network create -d transparent -o com.docker.network.windowsshim.interface="Ethernet 2" TransparentNet2
Примечание. Значение com.docker.network.windowsshim.interface — это имя сетевого адаптера, которое можно определить с помощью:
PS C:\> Get-NetAdapter
Укажите DNS-суффикс и (или) DNS-серверы сети
Применимо ко всем сетевым драйверам
Используйте параметр, -o com.docker.network.windowsshim.dnssuffix=<DNS SUFFIX>
, чтобы указать DNS-суффикс сети и параметр, -o com.docker.network.windowsshim.dnsservers=<DNS SERVER/S>
, чтобы указать DNS-серверы сети. Например, можно использовать следующую команду, чтобы задать dns-суффикс сети на "example.com", а DNS-серверы сети — 4.4.4.4 и 8.8.8.8.8.
C:\> docker network create -d transparent -o com.docker.network.windowsshim.dnssuffix=abc.com -o com.docker.network.windowsshim.dnsservers=4.4.4.4,8.8.8.8 MyTransparentNetwork
VFP
Дополнительные сведения см. в этой статье.
Советы по & Insights
Вот список полезных советов и аналитических сведений, вдохновленных распространенными вопросами о сети контейнеров Windows, которые мы слышим от сообщества...
Для HNS требуется, чтобы IPv6 был включен на компьютерах узла контейнеров
В рамках KB4015217 HNS требуется, чтобы IPv6 был включен на узлах контейнеров Windows. При возникновении ошибки, например приведенной ниже, на хост-компьютере может быть отключен протокол IPv6.
docker: Error response from daemon: container e15d99c06e312302f4d23747f2dfda4b11b92d488e8c5b53ab5e4331fd80636d encountered an error during CreateContainer: failure in a Windows system call: Element not found.
```output
We're working on platform changes to automatically detect/prevent this issue. Currently the following workaround can be used to ensure IPv6 is enabled on your host machine:
```output
C:\> reg delete HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters /v DisabledComponents /f
Контейнеры Linux в Windows
NEW: Мы работаем над тем, чтобы обеспечить возможность запускать контейнеры Linux и Windows параллельно безвиртуальной машины Moby Linux. Дополнительные сведения см. в этой записи блога о контейнерах Linux в Windows (LCOW). Вот как приступить к работе.
ПРИМЕЧАНИЕ: LCOW прекращает поддержку виртуальной машины Moby Linux, и она будет использовать внутренний виртуальный коммутатор (vSwitch) HNS по умолчанию, nat.
Виртуальные машины Moby Linux используют коммутатор DockerNAT вместе с Docker для Windows (это продукт Docker CE)
Docker для Windows (драйвер Windows для подсистемы Docker CE) в Windows 10 будет использовать внутренний vSwitch с именем DockerNAT для подключения виртуальных машин Moby Linux к узлу контейнера. Разработчики, использующие виртуальные машины Moby Linux в Windows, должны учитывать, что их хосты настроены на использование vSwitch DockerNAT, а не vSwitch "nat", созданного службой HNS (который используется по умолчанию для контейнеров Windows).
Чтобы использовать DHCP для назначения IP-адресов на узле виртуального контейнера, включите MACAddressSpoofing.
Если узел контейнера виртуализирован и вы хотите использовать DHCP для назначения IP-адресов, необходимо включить MACAddressSpoofing на сетевом адаптере виртуальной машины. В противном случае узел Hyper-V блокирует сетевой трафик из контейнеров на виртуальной машине с несколькими MAC-адресами. Вы можете включить MACAddressSpoofing с помощью этой команды PowerShell:
PS C:\> Get-VMNetworkAdapter -VMName ContainerHostVM | Set-VMNetworkAdapter -MacAddressSpoofing On
Если вы используете VMware в качестве гипервизора, вам потребуется включить простой режим для работы. Подробные сведения можно найти здесь
Создание нескольких прозрачных сетей на одном узле контейнера
Если вы хотите создать несколько прозрачных сетей, необходимо указать, к каким (виртуальным) сетевым адаптерам следует привязать внешний Hyper-V Виртуальный коммутатор. Чтобы указать интерфейс для сети, используйте следующий синтаксис:
# General syntax:
C:\> docker network create -d transparent -o com.docker.network.windowsshim.interface=<INTERFACE NAME> <NETWORK NAME>
# Example:
C:\> docker network create -d transparent -o com.docker.network.windowsshim.interface="Ethernet 2" myTransparent2
Не забудьте указать --subnet и --gateway при использовании статического назначения IP-адресов
При использовании статического назначения IP-адресов необходимо сначала убедиться, что параметры --subnet и --gateway указываются при создании сети. IP-адрес подсети и шлюза должен совпадать с параметрами сети узла контейнера , т. е. физической сетью. Например, вот как можно создать прозрачную сеть, а затем запустить конечную точку в этой сети с помощью статического НАЗНАЧЕНИЯ IP-адресов:
# Example: Create a transparent network using static IP assignment
# A network create command for a transparent container network corresponding to the physical network with IP prefix 10.123.174.0/23
C:\> docker network create -d transparent --subnet=10.123.174.0/23 --gateway=10.123.174.1 MyTransparentNet
# Run a container attached to MyTransparentNet
C:\> docker run -it --network=MyTransparentNet --ip=10.123.174.105 windowsservercore cmd
Назначение IP-адресов DHCP не поддерживается в сетях L2Bridge
Только статичное назначение IP-адресов поддерживается с помощью сетей контейнеров, созданных с помощью драйвера l2bridge. Как упоминалось выше, не забудьте использовать параметры --subnet и --gateway для создания сети, настроенной для назначения статических IP-адресов.
Сети, использующие внешний vSwitch, должны иметь собственный сетевой адаптер
Обратите внимание, что если на одном узле контейнера создаются несколько сетей, использующих внешний vSwitch для подключения (например, Прозрачный, L2 Мост, L2 Прозрачный), каждой из них потребуется собственный сетевой адаптер.
Назначение IP-адресов в остановленном и запущенном контейнере
Назначение статических IP-адресов выполняется непосредственно на сетевом адаптере контейнера и должно выполняться только в том случае, если контейнер находится в состоянии STOPPED. "Горячая установка сетевых адаптеров контейнера или изменения в сетевом стеке не поддерживаются (в Windows Server 2016) во время выполнения контейнера."
Существующий vSwitch (не видимый для Docker) может блокировать прозрачное создание сети
При возникновении ошибки при создании прозрачной сети возможно, что в системе есть внешний vSwitch, который не был автоматически обнаружен Docker и поэтому предотвращает привязку прозрачной сети к внешнему сетевому адаптеру узла контейнера.
При создании прозрачной сети Docker создает внешний vSwitch для сети, а затем пытается привязать коммутатор к сетевому адаптеру (внешней) — адаптер может быть сетевым адаптером виртуальной машины или физическим сетевым адаптером. Если vSwitch уже создан на узле контейнера, и видимым для Docker, подсистема Windows Docker будет использовать этот коммутатор вместо создания нового. Однако если vSwitch, созданный не стандартным образом (т. е. созданный на узле контейнера с помощью диспетчера HYper-V или PowerShell), и еще не видимый для Docker, движок Windows Docker попытается создать новый vSwitch, а затем не сможет соединить новый vSwitch к внешнему сетевому адаптеру узла контейнера (так как сетевой адаптер уже подключен к коммутатору, который был создан не стандартным образом).
Например, эта проблема возникает, если вы сначала создадите на узле новый vSwitch во время работы службы Docker, а затем попытаетесь создать прозрачную сеть. В этом случае Docker не распознает созданный коммутатор и создаст новый vSwitch для прозрачной сети.
Существует три подхода для решения этой проблемы:
- Вы можете, конечно, удалить vSwitch, созданный вне полосы, что позволит docker создать новый vSwitch и подключить его к сетевому адаптеру узла без проблем. Прежде чем выбрать этот подход, убедитесь, что ваш внеполосный vSwitch не используется другими службами (например, Hyper-V).
- Кроме того, если вы решили использовать внешний vSwitch, созданный вне полосы, перезапустите службы Docker и HNS, чтобы сделать переключатель видимым для Docker.
PS C:\> restart-service hns
PS C:\> restart-service docker
- Другой вариант — использовать параметр "-o com.docker.network.windowsshim.interface" для привязки внешней виртуальной машины прозрачной сети к определенному сетевому адаптеру, который еще не используется на узле контейнера (т. е. сетевой адаптер, отличный от того, который использовался vSwitch, созданный вне полосы). Параметр "-o" описан далее в разделе Создание нескольких прозрачных сетей на одном узле контейнера раздела этого документа.
Обходные решения Windows Server 2016
Несмотря на то что мы продолжаем добавлять новые функции и развивать разработку, некоторые из этих функций не будут переноситься на старые платформы. Вместо этого лучший план действий — "получить на поезде" последние обновления Windows и Windows Server. В разделе ниже перечислены некоторые действия и предостережения, которые применяются к Windows Server 2016 и более старым версиям Windows 10 (т. е. до 1704 Creators Update)
Несколько сетей NAT на узле контейнеров WS2016
Разделы для любых новых сетей NAT должны быть созданы с использованием более крупного внутреннего префикса сети NAT. Префикс можно найти, выполнив следующую команду из PowerShell и ссылаясь на поле InternalIPInterfaceAddressPrefix.
PS C:\> Get-NetNAT
Например, внутренний префикс сети NAT узла может быть 172.16.0.0/16. В этом случае Docker можно использовать для создания дополнительных NAT-сетей , если они являются подмножеством префикса 172.16.0.0/16. Например, можно создать две сети NAT с префиксами IP-адресов 172.16.1.0/24 (шлюз, 172.16.1.1) и 172.16.2.0/24 (шлюз, 172.16.2.1).
C:\> docker network create -d nat --subnet=172.16.1.0/24 --gateway=172.16.1.1 CustomNat1
C:\> docker network create -d nat --subnet=172.16.2.0/24 --gateway=172.16.1.1 CustomNat2
Только что созданные сети можно перечислить с помощью:
C:\> docker network ls
Docker Compose
Docker Compose можно использовать для определения и настройки сетей контейнеров вместе с контейнерами и службами, которые будут использовать эти сети. Ключ Compose "networks" используется в качестве ключа верхнего уровня при определении сетей, к которым будут подключены контейнеры. Например, приведённый ниже синтаксис определяет предварительно существующую NAT-сеть, созданную Docker, как сеть по умолчанию для всех контейнеров и служб, определённых в заданном файле Compose.
networks:
default:
external:
name: "nat"
Аналогичным образом можно использовать следующий синтаксис для определения пользовательской сети NAT.
Примечание. Пользовательская сеть NAT, определенная в приведенном ниже примере, определяется как секция предварительно существующего внутреннего префикса NAT узла контейнера. См. выше в разделе "Несколько сетей NAT" для получения дополнительной информации.
networks:
default:
driver: nat
ipam:
driver: default
config:
- subnet: 172.16.3.0/24
Для получения дополнительной информации об определении и настройке сетей контейнеров с помощью Docker Compose, смотрите справочник по файлу Compose .