Docker主機網路與橋接網路


Docker網路有兩個型別的單主機網路 - **“host”** 和 **“bridge”** 網路。單主機網路意味著它們的影響僅限於每個主機。

對於主機網路,特定的Docker容器可以直接使用主機的網路來發送和接收資料包。對於橋接網路,需要埠對映才能進行通訊。

為了更好地理解它們,讓我們使用主機網路建立一個nginx容器。在建立nginx容器之前,讓我們列出所有可用的網路。

sudo docker network ls

你會找到一個名為host,驅動程式名為host,作用域為local的網路。嘗試使用以下命令檢查該網路。

sudo docker network inspect host

你會得到一個包含網路所有詳細資訊的JSON列表。請注意,Containers物件最初是空的。

現在,我們將使用主機網路建立一個nginx Docker容器。

sudo docker container run −d −−network host −−name nginx01 nginx−alpine

使用主機網路時,我們不需要指定埠對映,因為主機網路驅動程式在Linux/Unix系統上執行時會自動使用“eth0”。

使用以下命令獲取容器ID。

sudo docker inspect <container−id>

在瀏覽器中複製此IP地址,你可以驗證nginx容器是否成功執行。

要檢查主機網路是否使用埠對映,請列出容器以獲取埠詳細資訊。

sudo docker container ls

你會發現nginx容器的埠列表為空。

現在,使用以下命令檢查主機網路。

sudo network inspect host

你會發現現在容器列表中包含nginx容器的詳細資訊。這驗證了nginx容器現在正在主機網路上執行。

現在讓我們使用網路橋接驅動程式建立一個另一個nginx容器,但不進行埠對映。

sudo docker run −d −−network bridge −−name nginx02 nginx−alpine

現在,執行docker list命令以獲取容器的詳細資訊。

sudo docker container ls

你會發現,在nginx02容器的ports部分,你會找到列出的埠號和協議。由於我們在使用橋接網路驅動程式建立容器時沒有指定埠對映,因此你將無法透過本地機器訪問它。為了驗證這一點,請嘗試透過瀏覽器貼上容器的IP地址來訪問它。

sudo docker inspect <container−id>

將IP地址複製到瀏覽器,你會發現它會報錯,因為我們沒有指定埠對映。

現在,我們將停止並刪除nginx02容器,並建立另一個容器,但這次指定埠對映。

sudo docker stop nginx02

sudo docker container rm nginx02

刪除nginx容器後,建立另一個網路,最好使用相同的名稱,但使用埠對映和橋接網路驅動程式。

sudo docker container run −d −−network bridge −−name nginx02 −p 80:80 nginx:alpine

我們現在已經使用橋接網路驅動程式建立了nginx02容器,並映射了埠號80。執行容器列表命令以驗證。

sudo docker container ls

現在,使用以下命令找出nginx02容器的IP地址。

sudo docker inspect <container−id>

複製IP地址並將其貼上到瀏覽器中。你現在可以使用瀏覽器訪問nginx容器。檢查橋接網路以驗證。

sudo docker network inspect bridge

總而言之,在本文中,我們討論瞭如何使用主機和橋接網路驅動程式建立nginx容器。然後我們看到了兩者之間的區別。主機驅動程式自動訪問eth0埠,不需要埠對映。但是,橋接網路驅動程式需要埠對映才能從外部訪問它們。

更新於:2020年10月27日

5K+ 閱讀量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告