Skip to content

antony@notes:~/container$ cat "Docker-原生橋接網路架構圖.md"

Docker 原生橋接網路架構圖

2021-10-24· container ·Docker

Docker 原生橋接網路架構圖

  • 在同一台電腦裡面,eth0與bridge這兩個網路設備要互通有無,必須要把ip_forword這個功能啟動。
  • Docker Container就是一個process,可以產生network namespace,裡面可以放一片網路卡進去,Docker0(bridge)他也是一個程式,他自己也有自己的network namespace,也可以放一片網路卡進去。
  • 問: 甚麼叫做Docker的原生橋接器?
    • 答: Docker負責做出一個虛擬橋接器網路,他會跟電腦的實際網卡互通有無、愛在一塊。代表橋接器可以把封包和資料,透過eth0傳到外網去。虛擬橋接器不但會找出口(eth0),還會跟內部的container也愛在一塊,這些結構是由network namespace做出來的,每個container連到bridge,就會構成網路,事實上可以把bridge想像成橋、交換器、switch。
  • host 為 dokcer host ,就是我們現在開的虛擬機 alp , 用來產生 container 的
  • docker0 (bridge) 為虛擬橋接器 (在電腦內部的 switch,使用 brctl 指令模擬出 ) ,需要在 host 的系統上開啟 ipv4.ip_forward 才能使用封包轉送功能
    • 可使用 sysctl -a 2>/dev/null| grep 'ipv4.ip_forward ' 確認 host 的設定
  • eth0 <-> veth :也就是之前教的 ifconfig 設定出的 peer (對接)網卡

$ sudo iptables -t nat -L | grep 172.17
MASQUERADE  all  --  172.17.0.0/16        anywhere 

MASQUERADE意思是偽裝


bigred@alp:~$ docker exec -it w1 sh
/ # route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.17.0.1      0.0.0.0         UG    0      0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0

route -ncat /etc/resolv.confifconfig 很重要!!!


$ docker run --rm --name n1 -p 8080:80 -d quay.io/cloudwalker/nginx

  • -p 8080:80: 在Docker host這台機器開一個port: 8080,自己的container的port: 80。
  • 為何是80?
    • 因為啟動了nginx,nginx是一個網站,他的port一定是80。
tags: Docker