Docker 容器中的Loopback

2021-08-28 13:31:20 字數 2313 閱讀 9087

tcp/ip協議族中包含乙個虛擬網路介面(virtual network inte***ce),通過這個介面同一主機上的不同網路應用就可以相互通訊,傳送到loopbackip位址的通訊會直接傳送到本機的網路通訊棧,被本機接受,不會真的發出去,而接受到這個通訊的應用就像這個通訊是來自其它主機一樣消費它。

我們常用的127.0.0.1localhost都是loopback的,在unix-like的系統裡這個loopback介面一般簡寫為lo或者lo0,我們可以通過ifconfig來檢查:

lo: flags=73mtu 65536

inet 127.0.0.1 netmask 255.0.0.0

loop txqueuelen 1000 (local loopback)

rx packets 8122999 bytes 16921605838 (16.9 gb)

rx errors 0 dropped 0 overruns 0 frame 0

tx packets 8122999 bytes 16921605838 (16.9 gb)

tx errors 0 dropped 0 overruns 0 carrier 0 collisions 0

docker映象中應用的依賴在映象中都包括,這是docker簡化安裝與部署的關鍵,應用的依賴包括系統環境,往往乙個docker映象的第一層(最底層)就是作業系統,作業系統我們可以選擇ubuntucentos或者alpine等等,其中alpine因為體積小被廣泛使用。

所以,docker容器中也存在loopback機制,所以我們在容器中使用localhost或者127.0.0.1試圖訪問宿主機的其它網路應用的時候,會失敗,因為localhost127.0.0.1都是loopbackip,所以訪問的是容器內部,請求不能到達宿主機。

docker啟動容器預設在乙個名為docker0bridge網路裡,那麼我們就可以通過docker0訪問宿主機,比如使用ifconfig

docker0: flags=4099mtu 1500

inet 172.18.0.1 netmask 255.255.0.0 broadcast 172.18.255.255

ether 02:42:77:24:4c:a3 txqueuelen 0 (ethernet)

rx packets 0 bytes 0 (0.0 b)

rx errors 0 dropped 0 overruns 0 frame 0

tx packets 0 bytes 0 (0.0 b)

tx errors 0 dropped 0 overruns 0 carrier 0 collisions 0

可以看到172.18.0.1docker0的ip,那麼在容器內訪問172.18.0.1就相當於訪問宿主機了。

既然容器內有loopbak的存在,所以我們啟動應用的時候繫結hostname就要避免localhost127.0.0.1的使用。例如我們在容器中打包乙個nodejs的應用,使用koa啟動時有乙個可選的引數是hostname,若不指定,預設為0.0.0.0,如果你指定了localhost或者127.0.0.1,那麼即使你將容器中的埠對映到宿主機,你也不能訪問,但是在容器中可以訪問。所以如果指定,也要指定0.0.0.0。**如下:

const koa =

require

("koa");

newkoa()

;listen

(3000

,'0.0.0.0',(

)=>

);

本文主要介紹了loopback的概念,docker容器中的loopback帶來的問題及解決的方法。

Docker容器中執行docker 命令

一 在一台執行了docker的伺服器上,啟動374c3bec1f4b 映象的容器,這個映象中安裝docker yum install docker y docker run itd v var run docker.sock var run docker.sock name docker test ...

docker中nginx容器和php容器混合執行

該容器在文章 php環境容器大 制得,亦可用docker官方提供的php環境 啟動php容器 docker run name php1 v home wwwroot service config php config usr local php etc v home wwwroot home www...

docker容器 Docker 容器逃逸漏洞

2020年12月1日,阿里雲應急響應中心監測到 containerd 官方發布安全更新,修復了 docker 容器逃逸漏洞 cve 2020 15257 漏洞描述 containerd 是乙個控制 runc 的守護程序,提供命令列客戶端和 api,用於在乙個機器上管理容器。在特定網路條件下,攻擊者可...