Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: Windows Server 2022, Windows Server 2019, Windows Server 2016
Se admiten varias opciones de controlador de red para aprovechar las funcionalidades y características específicas de Windows.
Cambio de equipo insertado con redes de Docker
Se aplica a todos los controladores de red
Puede aprovechar las ventajas de Switch Embedded Teaming al crear redes host de contenedor para usarlas mediante Docker especificando varios adaptadores de red (separados por comas) con la -o com.docker.network.windowsshim.interface opción .
C:\> docker network create -d transparent -o com.docker.network.windowsshim.interface="Ethernet 2", "Ethernet 3" TeamedNet
Establecer el identificador de VLAN para una red
Se aplica a los controladores de red transparentes y l2bridge
Para establecer un identificador de VLAN para una red, use la opción para -o com.docker.network.windowsshim.vlanid=<VLAN ID> el docker network create comando . Por ejemplo, puede usar el siguiente comando para crear una red transparente con un identificador de VLAN de 11:
C:\> docker network create -d transparent -o com.docker.network.windowsshim.vlanid=11 MyTransparentNetwork
Al establecer el identificador de VLAN para una red, se establece el aislamiento de VLAN para los puntos de conexión de contenedor que se asociarán a esa red.
Asegúrese de que el adaptador de red host (físico) está en modo troncal para permitir que el vSwitch procese todo el tráfico etiquetado con el puerto vNIC (punto de conexión de contenedor) en modo de acceso en la VLAN correcta.
Especificar la directiva OutboundNAT para una red
Se aplica a las redes l2bridge
Normalmente, cuando se crea una l2bridge red de contenedor mediante docker network create, los puntos de conexión de contenedor no tienen aplicada una directiva outboundNAT de HNS, lo que provoca que los contenedores no puedan acceder al mundo exterior. Si va a crear una red, puede usar la opción de aplicar la -o com.docker.network.windowsshim.enable_outboundnat=<true|false> directiva de HNS outboundNAT para conceder a los contenedores acceso al mundo exterior:
C:\> docker network create -d l2bridge -o com.docker.network.windowsshim.enable_outboundnat=true MyL2BridgeNetwork
Si hay un conjunto de destinos (por ejemplo, se necesita un contenedor para la conectividad de contenedor) para el lugar en el que no queremos que se produzca NAT, también es necesario especificar una exceptionList:
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
Especificar el nombre de una red al servicio HNS
Se aplica a todos los controladores de red
Normalmente, cuando se crea una red de contenedor mediante docker network create, el servicio de Docker usa el nombre de red que proporciona, pero no el servicio HNS. Si va a crear una red, puede especificar el nombre proporcionado por el servicio HNS mediante la opción , -o com.docker.network.windowsshim.networkname=<network name> en el docker network create comando . Por ejemplo, puede usar el siguiente comando para crear una red transparente con un nombre especificado en el servicio HNS:
C:\> docker network create -d transparent -o com.docker.network.windowsshim.networkname=MyTransparentNetwork MyTransparentNetwork
Enlace de una red a una interfaz de red específica
Se aplica a todos los controladores de red excepto "nat"
Para enlazar una red (conectada a través del conmutador virtual de Hyper-V) a una interfaz de red específica, use la opción para -o com.docker.network.windowsshim.interface=<Interface> el docker network create comando . Por ejemplo, puede usar el siguiente comando para crear una red transparente que esté conectada a la interfaz de red "Ethernet 2":
C:\> docker network create -d transparent -o com.docker.network.windowsshim.interface="Ethernet 2" TransparentNet2
Nota: El valor de com.docker.network.windowsshim.interface es el nombre del adaptador de red, que se puede encontrar con:
PS C:\> Get-NetAdapter
Especificar el sufijo DNS o los servidores DNS de una red
Se aplica a todos los controladores de red
Use la opción para -o com.docker.network.windowsshim.dnssuffix=<DNS SUFFIX> especificar el sufijo DNS de una red y la opción para -o com.docker.network.windowsshim.dnsservers=<DNS SERVER/S> especificar los servidores DNS de una red. Por ejemplo, puede usar el siguiente comando para establecer el sufijo DNS de una red en "example.com" y los servidores DNS de una red en 4.4.4.4 y 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
Consulte este artículo para más información.
Recomendaciones y Ideas
Esta es una lista de sugerencias y conclusiones útiles, inspiradas en preguntas comunes sobre redes de contenedores de Windows que escuchamos de la comunidad...
HNS requiere que IPv6 esté habilitado en máquinas host de contenedor.
Como parte de KB4015217 HNS requiere que IPv6 esté habilitado en hosts de contenedor de Windows. Si tiene un error como el siguiente, existe la posibilidad de que IPv6 esté deshabilitado en el equipo host.
docker: Error response from daemon: container e15d99c06e312302f4d23747f2dfda4b11b92d488e8c5b53ab5e4331fd80636d encountered an error during CreateContainer: failure in a Windows system call: Element not found.
Estamos trabajando en los cambios de la plataforma para detectar o evitar este problema automáticamente. Actualmente, se puede usar la siguiente solución alternativa para asegurarse de que IPv6 está habilitado en el equipo host:
C:\> reg delete HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters /v DisabledComponents /f
Contenedores de Linux en Windows
NUEVO: Estamos trabajando para que sea posible ejecutar contenedores de Linux y Windows en paralelo sin la máquina virtual Moby Linux. Consulte esta entrada de blog sobre contenedores de Linux en Windows (LCOW) para obtener más información. Aquí se muestra cómo empezar.
NOTA: LCOW está en desuso en la máquina virtual Linux de Moby y usará el VSwitch interno de HNS predeterminado.
Las máquinas virtuales Linux de Moby usan el conmutador DockerNAT con Docker para Windows (un producto de Docker CE)
Docker para Windows (el controlador de Windows para el motor de Docker CE) en Windows 10 usará un vSwitch interno denominado "DockerNAT" para conectar máquinas virtuales Linux de Moby al host de contenedor. Los desarrolladores que usan máquinas virtuales Linux de Moby en Windows deben tener en cuenta que sus hosts usan dockerNAT vSwitch en lugar del vSwitch "nat" creado por el servicio HNS (que es el conmutador predeterminado que se usa para los contenedores de Windows).
Para usar DHCP para la asignación de IP en un host de contenedor virtual, habilite MACAddressSpoofing
Si el host de contenedor está virtualizado y desea usar DHCP para la asignación de IP, debe habilitar MACAddressSpoofing en el adaptador de red de la máquina virtual. De lo contrario, el host de Hyper-V bloqueará el tráfico de red de los contenedores de la máquina virtual con varias direcciones MAC. Puede habilitar MACAddressSpoofing con este comando de PowerShell:
PS C:\> Get-VMNetworkAdapter -VMName ContainerHostVM | Set-VMNetworkAdapter -MacAddressSpoofing On
Si ejecuta VMware como hipervisor, deberá habilitar el modo promiscuo para que funcione. Los detalles se pueden encontrar aquí
Creación de varias redes transparentes en un único host de contenedor
Si desea crear más de una red transparente, debe especificar a qué adaptador de red (virtual) debe enlazar el conmutador virtual externo de Hyper-V. Para especificar la interfaz de una red, use la sintaxis siguiente:
# 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
No olvide especificar --subnet y --gateway al usar la asignación de IP estática.
Al usar la asignación de IP estática, primero debe asegurarse de que los parámetros --subnet y --gateway se especifican cuando se crea la red. La subred y la dirección IP de puerta de enlace deben ser las mismas que la configuración de red para el host de contenedor, es decir, la red física. Por ejemplo, este es el modo en que puede crear una red transparente y, a continuación, ejecutar un punto de conexión en esa red mediante la asignación de IP estática:
# 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
No se admite la asignación de IP DHCP con redes L2Bridge
Solo se admite la asignación de DIRECCIONES IP estáticas con redes de contenedor creadas mediante el controlador l2bridge. Como se indicó anteriormente, recuerde usar los parámetros --subnet y --gateway para crear una red configurada para la asignación de IP estática.
Las redes que aprovechan vSwitch externo deben tener su propio adaptador de red.
Tenga en cuenta que si se crean varias redes que usan un vSwitch externo para la conectividad (por ejemplo, Transparente, Puente L2, L2 Transparente) en el mismo host de contenedor, cada una de ellas requiere su propio adaptador de red.
Asignación de IP en contenedores detenidos frente a contenedores en ejecución
La asignación de IP estática se realiza directamente en el adaptador de red del contenedor y solo se debe realizar cuando el contenedor está en estado DETENIDO. No se admite la "adición activa" de adaptadores de red de contenedor o cambios en la pila de red (en Windows Server 2016) mientras se ejecuta el contenedor.
El vSwitch existente (no visible para Docker) puede bloquear la creación de red transparente.
Si se produce un error al crear una red transparente, es posible que haya un vSwitch externo en el sistema que Docker no detectó automáticamente y, por tanto, impide que la red transparente esté enlazada al adaptador de red externo del host de contenedor.
Al crear una red transparente, Docker crea un vSwitch externo para la red y, a continuación, intenta enlazar el conmutador a un adaptador de red (externo): el adaptador podría ser un adaptador de red de máquina virtual o el adaptador de red físico. Si ya se ha creado un vSwitch en el host de contenedor y es visible para Docker, el motor de Docker de Windows usará ese modificador en lugar de crear uno nuevo. Sin embargo, si el vSwitch que se creó fuera de banda (es decir, creado en el host de contenedor mediante el Administrador de HYper-V o PowerShell) y aún no está visible para Docker, el motor de Docker de Windows intentará crear un nuevo vSwitch y, a continuación, no podrá conectar el nuevo conmutador al adaptador de red externo del host de contenedor (ya que el adaptador de red ya estará conectado al conmutador que se creó fuera de banda).
Por ejemplo, este problema surgiría si primero creara un nuevo vSwitch en el host mientras se estaba ejecutando el servicio docker y, a continuación, intente crear una red transparente. En este caso, Docker no reconocería el modificador que creó y crearía un nuevo vSwitch para la red transparente.
Hay tres enfoques para resolver este problema:
- Por supuesto, puede eliminar el vSwitch que se creó fuera de banda, lo que permitirá a Docker crear un nuevo vSwitch y conectarlo al adaptador de red host sin problema. Antes de elegir este enfoque, asegúrese de que el vSwitch fuera de banda no está siendo utilizado por otros servicios (por ejemplo, Hyper-V).
- Como alternativa, si decide usar un vSwitch externo que se creó fuera de banda, reinicie los servicios docker y HNS para que el conmutador sea visible para Docker.
PS C:\> restart-service hns
PS C:\> restart-service docker
- Otra opción es usar la opción "-o com.docker.network.windowsshim.interface" para enlazar el vSwitch externo de la red transparente a un adaptador de red específico que aún no está en uso en el host de contenedor (es decir, un adaptador de red distinto del que usa el vSwitch que se creó fuera de banda). La opción "-o" se describe más adelante en la sección Creación de varias redes transparentes en un único host de contenedor de este documento.
Entornos de trabajo de Windows Server 2016
Aunque seguimos agregando nuevas características e impulsamos el desarrollo, algunas de estas características no se migrarán a plataformas anteriores. En su lugar, el mejor plan de acción es "ponerse en el tren" para las actualizaciones más recientes de Windows 10 y Windows Server. En la sección siguiente se enumeran algunas soluciones alternativas y advertencias que se aplican a Windows Server 2016 y versiones anteriores de Windows 10 (es decir, antes de 1704 Creators Update)
Varias redes NAT en el host de contenedor WS2016
Las particiones de las nuevas redes NAT deben crearse en el prefijo de red NAT interno más grande. El prefijo se puede encontrar ejecutando el siguiente comando desde PowerShell y haciendo referencia al campo "InternalIPInterfaceAddressPrefix".
PS C:\> Get-NetNAT
Por ejemplo, el prefijo interno de red NAT del host podría ser 172.16.0.0/16. En este caso, Docker se puede usar para crear redes NAT adicionales siempre que sean un subconjunto del prefijo 172.16.0.0/16. Por ejemplo, se podrían crear dos redes NAT con los prefijos IP 172.16.1.0/24 (puerta de enlace, 172.16.1.1) y 172.16.2.0/24 (puerta de enlace, 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
Las redes recién creadas se pueden enumerar mediante:
C:\> docker network ls
Docker Compose
Docker Compose se puede usar para definir y configurar redes de contenedor junto con los contenedores o servicios que usarán esas redes. La clave "networks" de Compose se usa como clave de nivel superior para definir las redes a las que se conectarán los contenedores. Por ejemplo, la sintaxis siguiente define la red NAT preexistente creada por Docker para que sea la red "predeterminada" para todos los contenedores o servicios definidos en un archivo compose determinado.
networks:
default:
external:
name: "nat"
Del mismo modo, se puede usar la sintaxis siguiente para definir una red NAT personalizada.
Nota: La "red NAT personalizada" definida en el ejemplo siguiente se define como una partición del prefijo interno NAT existente del host de contenedor. Consulte la sección anterior, "Varias redes NAT", para obtener más contexto.
networks:
default:
driver: nat
ipam:
driver: default
config:
- subnet: 172.16.3.0/24
Para obtener más información sobre cómo definir o configurar redes de contenedor mediante Docker Compose, consulte la referencia de archivo de Compose.