1. 程式人生 > Docker入門教學 >Docker 網路 - none 模式

Docker 網路 - none 模式

容器與主機、容器與容器之間是互相隔離的。同時,我們可以通過配置 docker 網路,為容器建立完全獨立的網路名稱空間,或者使容器共享主機或者其他容器的網路名稱空間,以應對不同場景的需要。

這裡有4 種常用的單宿主機網路模式:

  1. bridge 模式;
  2. host 模式;
  3. container 模式;
  4. none 模式。

本小節我們將瞭解網路模式中的 none 模式。

1. none 模式

容器有自己的網路名稱空間,但不做任何配置,它與宿主機、與其他容器都不連通的。我們新建一個 none 模式的 busybox 映象 b0:

docker run -d -t --network none --name b0 busybox

使用 docker exec b0 ip a 檢視它的網路狀態, 驗證它僅有 lo 介面,不能與容器外通訊:

圖片描述

兩個容器之間可以直連通訊,但不通過主機網橋進行橋接。解決的辦法是建立一對 peer 介面,分別放到兩個容器中,配置成點到點鏈路型別即可。

⚠️ 以下操作需要在 Linux 下進行:

首先啟動 2 個容器:

docker run -it -d --net=none --name=none1 busybox
docker run -it -d --net=none --name=none2 busybox 

找到這兩個容器的程序號:

docker inspect -f '{{.State.Pid}}'
none1 #6545 docker inspect -f '{{.State.Pid}}' none2 #6606

然後建立網路名稱空間的跟蹤檔案:

sudo mkdir -p /var/run/netns
sudo ln -s /proc/6545/ns/net /var/run/netns/6545
sudo ln -s /proc/6606/ns/net /var/run/netns/6606

建立一對 peer 介面,然後配置路由:

 sudo ip link add A type veth peer name B
 
 sudo ip link set A netns 6545
 sudo ip netns exec 6545 ip addr add 10.1.1.1/32 dev A
 sudo
ip netns exec 6545 ip link set A up sudo ip netns exec 6545 ip route add 10.1.1.2/32 dev A sudo ip link set B netns 6606 sudo ip netns exec 6606 ip addr add 10.1.1.2/32 dev B sudo ip netns exec 6606 ip link set B up sudo ip netns exec 6606 ip route add 10.1.1.1/32 dev B

現在這 2 個容器就可以相互 ping 通,併成功建立連線。點到點鏈路不需要子網和子網掩碼:
圖片描述

測試完畢刪除無用的容器:

docker rm -f none1 none2

2. 小結

none 模式提供了一種空白的網路配置,方便使用者排除其他干擾,用於自定義網路。