적용 대상: Windows Server 2025, Windows Server 2022, Windows Server 2019, Windows Server 2016
Windows 관련 기능 및 기능을 활용하기 위해 몇 가지 네트워크 드라이버 옵션이 지원됩니다.
Docker 네트워크를 사용하여 임베디드 팀 전환
모든 네트워크 드라이버에 적용됩니다.
여러 네트워크 어댑터(쉼표로 구분)를 -o com.docker.network.windowsshim.interface
옵션으로 지정하여 Docker에서 사용할 컨테이너 호스트 네트워크를 만들 때 Switch Embedded Teaming 활용할 수 있습니다.
C:\> docker network create -d transparent -o com.docker.network.windowsshim.interface="Ethernet 2", "Ethernet 3" TeamedNet
네트워크에 대한 VLAN ID 설정
투명 및 l2bridge 네트워크 드라이버에 적용됩니다.
네트워크에 대한 VLAN ID를 설정하려면 docker network create
명령에 -o com.docker.network.windowsshim.vlanid=<VLAN ID>
옵션을 사용합니다. 예를 들어 다음 명령을 사용하여 VLAN ID가 11인 투명한 네트워크를 만들 수 있습니다.
C:\> docker network create -d transparent -o com.docker.network.windowsshim.vlanid=11 MyTransparentNetwork
네트워크에 대한 VLAN ID를 설정하는 경우 해당 네트워크에 연결될 컨테이너 엔드포인트에 대해 VLAN 격리를 설정합니다.
올바른 VLAN의 액세스 모드에서 vNIC(컨테이너 엔드포인트) 포트를 사용하여 vSwitch에서 태그가 지정된 모든 트래픽을 처리할 수 있도록 호스트 네트워크 어댑터(물리적)가 트렁크 모드인지 확인합니다.
네트워크에 대한 OutboundNAT 정책 지정
l2bridge 네트워크에 적용
일반적으로 docker network create
사용하여 l2bridge
컨테이너 네트워크를 만들 때 컨테이너 엔드포인트에는 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가 발생하지 않도록 하려는 대상 집합(예: 컨테이너 간 연결이 필요)이 있는 경우 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
HNS 서비스에 대한 네트워크 이름 지정
모든 네트워크 드라이버에 적용됩니다.
일반적으로 docker network create
사용하여 컨테이너 네트워크를 만들 때 제공하는 네트워크 이름은 Docker 서비스에서 사용되지만 HNS 서비스에서는 사용되지 않습니다. 네트워크를 만드는 경우 docker network create
명령에 -o com.docker.network.windowsshim.networkname=<network name>
옵션을 사용하여 HNS 서비스에서 제공하는 이름을 지정할 수 있습니다. 예를 들어 다음 명령을 사용하여 HNS 서비스에 지정된 이름으로 투명한 네트워크를 만들 수 있습니다.
C:\> docker network create -d transparent -o com.docker.network.windowsshim.networkname=MyTransparentNetwork MyTransparentNetwork
특정 네트워크 인터페이스에 네트워크 바인딩
'nat'를 제외한 모든 네트워크 드라이버에 적용됩니다.
네트워크(Hyper-V 가상 스위치를 통해 연결됨)를 특정 네트워크 인터페이스에 바인딩하려면 docker network create
명령에 -o com.docker.network.windowsshim.interface=<Interface>
옵션을 사용합니다. 예를 들어 다음 명령을 사용하여 "이더넷 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로 설정할 수 있습니다.
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
팁 & 인사이트
다음은 커뮤니티에서 듣는 Windows 컨테이너 네트워킹에 대한 일반적인 질문에서 영감을 얻은 유용한 팁과 인사이트 목록입니다.
HNS를 사용하려면 컨테이너 호스트 컴퓨터에서 IPv6을 사용하도록 설정해야 합니다.
KB4015217 HNS의 일부로 Windows 컨테이너 호스트에서 IPv6을 사용하도록 설정해야 합니다. 아래와 같은 오류가 발생하는 경우 호스트 컴퓨터에서 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
Windows의 Linux 컨테이너
NEW: Moby Linux VM 없이 Linux 및 Windows 컨테이너를 나란히실행할 수 있도록 노력하고 있습니다. 자세한 내용은 LCOW(Windows의 Linux 컨테이너) 대한 이 블로그 게시물을 참조하세요. 시작하는방법은 다음과 같습니다.
참고: LCOW는 Moby Linux VM을 더 이상 사용하지 않으며 기본 HNS "nat" 내부 vSwitch를 활용합니다.
Moby Linux VM은 Windows용 Docker(Docker CE제품)와 DockerNAT 스위치를 사용합니다.
Windows 10의 Windows용 Docker(Docker CE 엔진용 Windows 드라이버)는 'DockerNAT'라는 내부 vSwitch를 사용하여 Moby Linux VM을 컨테이너 호스트에 연결합니다. Windows에서 Moby Linux VM을 사용하는 개발자는 호스트가 HNS 서비스에서 만든 "nat" vSwitch(Windows 컨테이너에 사용되는 기본 스위치)가 아닌 DockerNAT vSwitch를 사용하고 있음을 알고 있어야 합니다.
가상 컨테이너 호스트에서 IP 할당에 DHCP를 사용하려면 MACAddressSpoofing을 사용하도록 설정합니다.
컨테이너 호스트가 가상화되고 IP 할당에 DHCP를 사용하려는 경우 가상 머신의 네트워크 어댑터에서 MACAddressSpoofing을 사용하도록 설정해야 합니다. 그렇지 않으면 Hyper-V 호스트는 여러 MAC 주소가 있는 VM의 컨테이너에서 네트워크 트래픽을 차단합니다. 다음 PowerShell 명령을 사용하여 MACAddressSpoofing을 사용하도록 설정할 수 있습니다.
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
고정 IP 할당을 사용할 때 --subnet 및 --gateway을(를) 지정해야 합니다.
고정 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
L2Bridge 네트워크에서 지원되지 않는 DHCP IP 할당
l2bridge 드라이버를 사용하여 만든 컨테이너 네트워크에서는 고정 IP 할당만 지원됩니다. 위에서 설명한 대로 --subnet 및 -gateway 매개 변수를 사용하여 고정 IP 할당에 대해 구성된 네트워크를 만들어야 합니다.
외부 vSwitch를 활용하는 네트워크에는 각각 고유한 네트워크 어댑터가 있어야 합니다.
연결에 외부 vSwitch를 사용하는 여러 네트워크(예: 투명, L2 브리지, L2 투명)가 동일한 컨테이너 호스트에 만들어지는 경우 각각 자체 네트워크 어댑터가 필요합니다.
중지된 컨테이너와 실행 중인 컨테이너의 IP 할당
고정 IP 할당은 컨테이너의 네트워크 어댑터에서 직접 수행되며 컨테이너가 STOPPED 상태인 경우에만 수행해야 합니다. 컨테이너가 실행되는 동안 컨테이너 네트워크 어댑터 또는 네트워크 스택에 대한 변경 내용의 "핫 추가"는 (Windows Server 2016에서) 지원되지 않습니다.
기존 vSwitch(Docker에 표시되지 않음)는 투명한 네트워크 생성을 차단할 수 있습니다.
투명한 네트워크를 만드는 동안 오류가 발생하면 시스템에 Docker에서 자동으로 검색되지 않아 투명 네트워크가 컨테이너 호스트의 외부 네트워크 어댑터에 바인딩되지 않도록 하는 외부 vSwitch가 있을 수 있습니다.
투명 네트워크를 만들 때 Docker는 네트워크에 대한 외부 vSwitch를 만든 다음 스위치를 (외부) 네트워크 어댑터에 바인딩하려고 합니다. 어댑터는 VM 네트워크 어댑터 또는 실제 네트워크 어댑터일 수 있습니다. vSwitch가 컨테이너 호스트에 이미 만들어졌고 Docker에 표시되는 경우 Windows Docker 엔진은 새 스위치를 만드는 대신 해당 스위치를 사용합니다. 그러나 대역 외에서 만든 vSwitch(예: HYper-V Manager 또는 PowerShell을 사용하여 컨테이너 호스트에서 만든)가 아직 Docker에 표시되지 않는 경우 Windows Docker 엔진은 새 vSwitch를 만든 다음 새 스위치를 컨테이너 호스트 외부 네트워크 어댑터에 연결할 수 없습니다(네트워크 어댑터가 대역 외에서 만든 스위치에 이미 연결되었기 때문).
예를 들어 Docker 서비스가 실행되는 동안 호스트에 새 vSwitch를 먼저 만든 다음 투명한 네트워크를 만들려고 하면 이 문제가 발생합니다. 이 경우 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를 컨테이너 호스트에서 아직 사용하지 않는 특정 네트워크 어댑터(즉, 대역 외에 만들어진 vSwitch에서 사용되는 네트워크 어댑터 이외의 네트워크 어댑터)에 바인딩하는 것입니다. '-o' 옵션은 이 문서의 단일 컨테이너 호스트에 여러 투명 네트워크를 만드는 섹션에서 자세히 설명합니다.
Windows Server 2016 해결 방법
계속해서 새로운 기능을 추가하고 개발을 추진하지만 이러한 기능 중 일부는 이전 플랫폼으로 다시 이식되지 않습니다. 대신, Windows 및 Windows Server 최신 업데이트에 "탑승"하는 것이 가장 좋은 작업 계획입니다. 아래 섹션에서는 Windows Server 2016 및 이전 버전의 Windows 10(즉, 1704 크리에이터스 업데이트 이전)에 적용되는 몇 가지 해결 방법 및 주의 사항을 나열합니다.
WS2016 컨테이너 호스트의 여러 NAT 네트워크
새 NAT 네트워크에 대한 분할 영역은 더 큰 내부 NAT 네트워크 접두사 아래에서 만들어야 합니다. 접두사는 PowerShell에서 다음 명령을 실행하고 "InternalIPInterfaceAddressPrefix" 필드를 참조하여 찾을 수 있습니다.
PS C:\> Get-NetNAT
예를 들어 호스트의 NAT 네트워크 내부 접두사는 172.16.0.0/16일 수 있습니다. 이 경우 Docker를 사용하여 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)를 사용하여 두 개의 NAT 네트워크를 만들 수 있습니다.
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 사용하여 해당 네트워크를 사용할 컨테이너/서비스와 함께 컨테이너 네트워크를 정의하고 구성할 수 있습니다. '네트워크' 키 작성은 컨테이너가 연결될 네트워크를 정의하는 데 최상위 키로 사용됩니다. 예를 들어 아래 구문은 Docker에서 만든 기존 NAT 네트워크를 지정된 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를 사용하여 컨테이너 네트워크를 정의/구성하는 방법에 대한 자세한 내용은 파일 작성 참조 참조하세요.