Docker Network(Windows2016)

更新日 2017-04-03 (月) 18:46:28

サーバの物理構成としてネットワークは NICを2枚使用して一枚はDocker用のNIC、もう一枚はDockerサーバ用のNICにした。

Dockerには

  1. NATのネットワーク(デフォルトのネットワーク)
    • 各コンテナーは、内部のプライベート IP プレフィックス (例: 172.16.0.0/12) から IP アドレスを取得する。 コンテナー ホストからコンテナー エンドポイントへのポート転送およびマッピングがサポートされる。
  2. 透過のネットワーク
    • 各コンテナーのエンドポイントは、物理ネットワークに直接接続される。
  3. L2 ブリッジ ネットワーク
    • 各コンテナーのエンドポイントは、コンテナー ホストと同じ IP サブネット内にある。 IP アドレスは、コンテナー ホストと同じプレフィックスから静的に割り当てる必要がある。 ホスト上のすべてのコンテナーのエンドポイントは、レイヤー 2 のアドレス変換のために同じ MAC アドレスとなる。

がある

手順

  1. Dockerで自由にNetworkを構成するには起動しているDockerを停止する。
    • 「Stop-Service docker」
  2. Dockerサーバの「C:\ProgramData\docker\config」にdaemon.jsonというファイルを以下のように変更または作成する
    {
        "bridge" : "none"
    }
  3. デフォルトで動いているNAT構成(172.30.176.0/20のネットワーク)のDockerNetWorkの削除をする
    • 「Get-ContainerNetwork | Remove-ContainerNetwork」
  4. Dockerを起動する
    • 「Start-Server docker」

以下が実際のコマンドの様子

  • 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のネットワーク構成

従来のデフォルトネットワーク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

透過のネットワーク構成

物理ネットワークに直接接続する

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 ブリッジ ネットワーク構成

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

注意)--isolation=hypervでHyper-Vコンテナを使用するとき「L2 ブリッジ」では--ip 192.168.10.111のようにIPを固定できるが、「透過のネットワーク」では無視され外部DHCPよりIPが割り振られる。(仕様?)

問題: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を表示

  • ネットワーク名の確認
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": {}
    }
]

参考


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-04-03 (月) 18:46:28 (328d)