Docker 網路簡單說明

2022-03-17 12:25:20 字數 2061 閱讀 8975

docker daemon 會建立出乙個名為 docker0 的虛擬網橋 ,用來連線宿主機與容器,或者連線不同的容器。

veth pair 是用於不同network namespace間進行通訊的方式,veth pair 將乙個 network namespace 資料發往另乙個 network namespace 的 veth。

docker 利用 veth pair 技術,在宿主機上建立了兩個虛擬網路介面 veth0 和 veth1(veth pair 技術的特性可以保證無論哪乙個 veth 接收到網路報文,都會無條件地傳輸給另一方)。如下圖所示

也可以使用命令: ip addr

具體可以參考:

他是我們實現多個 host 之間的 container 通訊的基礎。 docker_gwbridge 網路在初始化或加入 swarm 時自動建立。大多數情況下,使用者不需要自定義配置,但是 docker 允許自定義。

docker_gwbridge是一種橋接網路,將 overlay 網路(包括 ingress 網路)連線到乙個單獨的 docker 守護程序的物理網路。預設情況下,服務正在執行的每個容器都連線到本地 docker 守護程序主機的 docker_gwbridge 網路。

在使用 docker 的過程中需要在 docker容器中訪問宿主機的80埠,而這個80埠是另外乙個容器8080埠對映出去的.當我在容器裡通過docker的網橋172.18.0.1訪問宿主機時,居然發現:

curl: (7) failed to connect to 172.18.0.1 port 80: no route to host
找到下面文章

正如 docker community forms 所言,這是乙個已知的bug,宿主機的80埠允許其它計算機訪問,但是不允許來自本機的docker容器訪問.必須通過設定firewalld規則允許本機的docker容器訪問.

可以通過在/etc/firewalld/zones/public.xml中新增防火牆規則避免這個問題;

獲取 docker0 的ip

新增 firewalld 規則

vi /etc/firewalld/zones/public.xml

# 新增

# 或使用命令

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.18.0.0/16" accept"

# 重啟 firewalld

firewall-cmd --reload

或systemctl restart firewalld

測試# 獲取宿主機ip

ifconfig eth0

# 這裡為 192.168.0.185

[root@localhost ~]# docker ps -a

container id image command created status ports names

[root@localhost ~]# docker exec -it 7d591c98e850 /bin/sh

/ # wget -q -o - 192.168.0.185:81

/ # wget -q -o - 192.168.0.185:82

# 成功訪問

FormatMessage簡單說明

常用引數簡介.formatmessage format message from system format message allocate buffer,null,lval,null,lptstr hlocal,0,null 第乙個引數是標誌,告訴這個formatmessage函式,我想要的特點...

Subversion 簡單說明

subversion 簡單說明 checkout 從源 管理伺服器取出 commit 提交更新的 到源 管理伺服器。update 從源 管理伺服器獲取 的最新更新。export 從源 管理伺服器匯出 匯出的 將脫離源 管理。revert 將當前資料恢復到最近與伺服器同步的版本,即放棄自己的所有未提交...

std deque簡單說明

本文 http blog.chinaunix.net u2 86575 showart 1734758.html std deque是乙個高效的雙端佇列,可以高效地進行插入和刪除操作。以sgi c stl為例 deque的基本結構是 有乙個map map中的元素是乙個記錄了乙個大小為512位元組的線...