*Docker Network(Windows2016) [#fa8f90c7] RIGHT:更新日 &lastmod(); サーバの物理構成としてネットワークは NICを2枚使用して一枚はDocker用のNIC、もう一枚はDockerサーバ用のNICにした。 Dockerには +NATのネットワーク(デフォルトのネットワーク) --各コンテナーは、内部のプライベート IP プレフィックス (例: 172.16.0.0/12) から IP アドレスを取得する。 コンテナー ホストからコンテナー エンドポイントへのポート転送およびマッピングがサポートされる。 +透過のネットワーク --各コンテナーのエンドポイントは、物理ネットワークに直接接続される。 +L2 ブリッジ ネットワーク --各コンテナーのエンドポイントは、コンテナー ホストと同じ IP サブネット内にある。 IP アドレスは、コンテナー ホストと同じプレフィックスから静的に割り当てる必要がある。 ホスト上のすべてのコンテナーのエンドポイントは、レイヤー 2 のアドレス変換のために同じ MAC アドレスとなる。 がある ***手順 [#xa26ff07] +Dockerで自由にNetworkを構成するには起動しているDockerを停止する。 --「Stop-Service docker」 +Dockerサーバの「C:\ProgramData\docker\config」にdaemon.jsonというファイルを以下のように変更または作成する { "bridge" : "none" } +デフォルトで動いているNAT構成(172.30.176.0/20のネットワーク)のDockerNetWorkの削除をする --「Get-ContainerNetwork | Remove-ContainerNetwork」 +Dockerを起動する --「Start-Server docker」 ***以下が実際のコマンドの様子 [#d970198f] -Dockerサービス停止 PS C:\Windows\system32> Stop-Service docker -コンテナネットワークの表示 PS C:\Windows\system32> Get-ContainerNetwork Name Id Subnets Mode SourceMac DNSServers DNSSuffix ---- -- ------- ---- --------- ---------- --------- nat 8b9a409f-20a7-41b5-b22d-b05ccef1b1ec {172.30.176.0/20} NAT -DockerNetWorkの削除 PS C:\Windows\system32> Get-ContainerNetwork | Remove-ContainerNetwork 確認 Remove-ContainerNetwork は、コンテナーのネットワーク "" を削除します。 [Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "Y"): -削除確認 PS C:\Windows\system32> Get-ContainerNetwork PS C:\Windows\system32> -Dockerサービス停止起動 PS C:\Windows\system32> Start-Service docker ***Natのネットワーク構成 [#ze97b813] 従来のデフォルトネットワーク172.30.176.0/20を変更する PS C:\Windows\system32> docker network create -d nat --subnet=192.168.101.0/24 --gateway=192.168.101.1 IsmNatNetwork ***透過のネットワーク構成 [#idef7249] 物理ネットワークに直接接続する docker network createで使用するパラメータcom.docker.network.windowsshim.interfaceの値は次のコマンドのNameを指定する PS C:\Windows\system32> Get-NetAdapter Name InterfaceDescription ifIndex Status MacAddress LinkSpeed ---- -------------------- ------- ------ ---------- --------- イーサネット 2 Intel(R) PRO/1000 PT Dual Port Ser...#2 7 Disconnected 00-15-17-97-2A-0F 0 bps イーサネット Intel(R) PRO/1000 PT Dual Port Serve... 15 Up 00-15-17-97-2A-0E 1 Gbps Npcap Loopback Adapter Npcap Loopback Adapter 19 Up 02-00-4C-4F-4F-50 1.2 Gbps イーサネット 3 Realtek PCIe GBE Family Controller 18 Up 00-26-18-7D-F7-EE 1 Gbps PS C:\Windows\system32> docker network create -d transparent -o com.docker.network.windowsshim.interface="イーサネット" --subnet=192.168.10.0/24 --gateway=192.168.10.245 IsmNet1 b1280e540af55856bf1a9470ffcea16da511e0c1329be5efdeb8778f738be879 -nanoserverで確認 PS C:\Windows\system32> docker run -it --network=IsmNet1 --ip 192.168.10.111 --name ismsv ism/nanoserver:last cmd ***L2 ブリッジ ネットワーク構成 [#paa76171] PS C:\Windows\system32> docker network create -d l2bridge -o com.docker.network.windowsshim.interface="イーサネット" --subnet=192.168.10.0/24 --gateway=192.168.10.245 IsmNetB 526aff3d1f36de7619a9a1adc1a5c87ed9b2d3250c60c73fd1d465bf40986b20 -nanoserverで確認(DNSも指定) PS C:\Windows\system32> docker run -it --network=IsmNetB --ip 192.168.10.111 --dns 192.168.10.46 --isolation hyperv --name ismsv ism/nanoserver:last cmd &color(red){注意)--isolation=hypervでHyper-Vコンテナを使用するとき「L2 ブリッジ」では--ip 192.168.10.111のようにIPを固定できるが、「透過のネットワーク」では無視され外部DHCPよりIPが割り振られる。(仕様?)}; &color(red){問題:};DockerコンテナからDockerサーバにPingが通らない。DockerサーバからDockerコンテナにはPingが通る。~ 外部PCからDockerサーバにPingが通らない。Dockerサーバから外部PCにはPingが通る。~ 外部PCからDockerサーバにはリモートデスクトップ接続ができる。~ (なんで???)~ Dockerサーバ:Dockerが動作しているWindows2016のこと -docker network createコマンドで作成したネットワークの表示 PS C:\Windows\system32> docker network ls NETWORK ID NAME DRIVER SCOPE 526aff3d1f36 BridgeNet1 l2bridge local 828be0f3273c none null local -docker network createコマンドで作成したネットワークの削除 PS C:\Windows\system32> docker network rm BridgeNet1 BridgeNet1 -IISを起動 PS C:\Windows\system32> docker run -it -d --isolation=hyperv --name ism-iis --network IsmNetB --ip 192.168.10.111 ism/iis cmd a63b5f11ea008579c8fc4fcf37bc6e4ae08d1dbb5d45d23c143bff221598c756 -MSSQLを起動 PS C:\Windows\system32> docker run -d --name ismsql --network=IsmNetB --isolation=hyperv -h ismsql --ip 192.168.10.114 \ -e sa_password=******* -e ACCEPT_EULA=Y microsoft/mssql-server-windows-express ***DockrHostからコンテナのIPを表示 [#v45462bb] -ネットワーク名の確認 PS C:\Windows\system32> docker network ls NETWORK ID NAME DRIVER SCOPE 6b2aa30dcbbb IsmNetB l2bridge local f3d699f90b9c none null local -IP確認 PS C:\Windows\system32> docker network inspect IsmNetB [ { "Name": "IsmNetB", "Id": "6b2aa30dcbbb20e8a0a72f2769bded0730652a6ec8250a1ec1291cd92f399ba0", "Created": "2017-04-03T18:09:26.3499841+09:00", "Scope": "local", "Driver": "l2bridge", "EnableIPv6": false, "IPAM": { "Driver": "windows", "Options": null, "Config": [ { "Subnet": "192.168.10.0/24", ←NetWork "Gateway": "192.168.10.245" ←G/W } ] }, "Internal": false, "Attachable": false, "Containers": { "9fc4e41be555e517da50ae33de38791c5374cff7cffccd7ab13b2e14fe77f053": { "Name": "ismsv1", ←コンテナ名 "EndpointID": "732fecad38b484e45ada63707c3e1a6fcf58986222dd35fc8c7ac97da4b96988", "MacAddress": "00:15:5d:c3:ce:45", "IPv4Address": "192.168.10.111/24", ←コンテナ名のIP "IPv6Address": "" } }, "Options": { "com.docker.network.windowsshim.hnsid": "edac228c-1f85-4215-a7ee-82ff20606715", "com.docker.network.windowsshim.networkname": "IsmNetB" }, "Labels": {} } ] **参考 [#y30d4519] -https://docs.microsoft.com/ja-jp/virtualization/windowscontainers/manage-containers/container-networking -https://docs.microsoft.com/ja-jp/virtualization/windowscontainers/manage-docker/configure-docker-daemon