容器的網路設定

輸入docker network ls列出目前的docker network

$ docker network ls
NETWORK ID     NAME     DRIVER    SCOPE
56e6b7438155   bridge   bridge    local
98a402d07220   host     host      local
9511eb2b9ea0   none     null      local

Bridge Network

Bridge Network主要是透過Linux kernel一個叫做network namespace的功能來建立隔離式的網路。在Docker Daemon啟動時,會根據下列步驟建立一個docker0的網路介面

  • 檢查docker0 bridge是否存在,如不存在則建立docker0 bridge

  • 搜尋與當前路由不衝突的IP網段

  • 選擇IP網段,並綁定至docker0

輸入ifconfig docker0可以查看相關資訊

root@vm:/home/jennifer# ifconfig docker0
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:34ff:fe9a:e7d1  prefixlen 64  scopeid 0x20<link>
        ether 02:42:34:9a:e7:d1  txqueuelen 0  (Ethernet)
        RX packets 2671008  bytes 258331993 (258.3 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2701399  bytes 289253518 (289.2 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

這個便是容器的預設網路,若在啟動容器時沒有指定,bridge network就是容器的網路模式。在bridge network上運行的容器可互相溝通,利用此模式建立的容器會有各自的IP address(如下圖)。

Host Network

若容器在建立時,設定--net=host,代表直接使用主機上的網路,若容器上的API運行在80 port,那麼這個80 port指的就是主機上的port。唯一要注意的是,若主機上的port已被其他程序使用,可能會導致容器啟動後無法正常使用。

None Network

若容器在建立時,設定--net=none也就是關閉容器的網路

Bridge Network與Host Network解釋

Last updated