docker容器間通訊(非網橋方式)

2021-08-29 22:52:24 字數 1579 閱讀 7237

預設情況下,docker 會將所有容器連線到由 docker0 提供的虛擬子網中。

使用者有時候需要兩個容器之間可以直連通訊,而不用通過主機網橋進行橋接。

解決辦法很簡單:建立一對 peer 介面,分別放到兩個容器中,配置成點到點鏈路型別即可。

首先啟動 2 個容器:

$ docker run -i -t --rm --net=none base /bin/bash

root@1f1f4c1f931a:/#

$ docker run -i -t --rm --net=none base /bin/bash

root@12e343489d2f:/#

找到程序號,然後建立網路命名空間的跟蹤檔案。

$ docker inspect -f '}' 1f1f4c1f931a

2989

$ docker inspect -f '}' 12e343489d2f

3004

$ sudo mkdir -p /var/run/netns

$ sudo ln -s /proc/2989/ns/net /var/run/netns/2989

$ sudo ln -s /proc/3004/ns/net /var/run/netns/3004

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

$ sudo ip link add a type veth peer name b

$ sudo ip link set a netns 2989

$ sudo ip netns exec 2989 ip addr add 10.1.1.1/32 dev a

$ sudo ip netns exec 2989 ip link set a up

$ sudo ip netns exec 2989 ip route add 10.1.1.2/32 dev a

$ sudo ip link set b netns 3004

$ sudo ip netns exec 3004 ip addr add 10.1.1.2/32 dev b

$ sudo ip netns exec 3004 ip link set b up

$ sudo ip netns exec 3004 ip route add 10.1.1.1/32 dev b

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

此外,也可以不指定 --net=none 來建立點到點鏈路。這樣容器還可以通過原先的網路來通訊。

利用類似的辦法,可以建立乙個只跟主機通訊的容器。但是一般情況下,更推薦使用 --icc=false 來關閉容器之間的通訊。

docker目前有三種方式容器間互聯,個人分為兩大類:

第一類:

通過網橋方式(囊括兩種)

1、古老的–link(相容老版本,不建議使用)

2、自定義 docker 網路 docker network create-d bridge

第二類就是上文訴說的建立一對 peer 介面

Docker 容器間通訊

name 給執行的容器起乙個名字 docker run d name web tomcat 執行centos 必須進入互動介面 it 進入互動模式 docker run d name database it centos bin bash inspect 檢視docker內部原始檔案。docker ...

Docker容器網路 網橋

docker使用linux橋接技術與其他容器通訊,以及連線外網。安裝完docker後你應該可以看到docker0 這個網橋,這是docker預設建立的。你建立的每個容器都會通過這個網橋連線到網路。docker服務缺省會建立乙個docker0網橋 其上有乙個docker0內部介面 它在核心層連通了其他...

更換docker容器預設網橋docker0

docker允許管理docker0橋接或者通過 b選項自定義橋接網絡卡,需要安裝bridge utils軟體包。步驟 1,確保docker的程序是停止的 2,建立自定義網橋,3,給網橋分配特定的ip 4,以 b的方式指定網橋 操作步驟 service docker stop ip link set ...