tcp/ip協議族中包含乙個虛擬網路介面(virtual network inte***ce)
,通過這個介面同一主機上的不同網路應用就可以相互通訊,傳送到loopback
ip位址的通訊會直接傳送到本機的網路通訊棧,被本機接受,不會真的發出去,而接受到這個通訊的應用就像這個通訊是來自其它主機一樣消費它。
我們常用的127.0.0.1
和localhost
都是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映象的第一層(最底層)就是作業系統,作業系統我們可以選擇ubuntu
、centos
或者alpine
等等,其中alpine
因為體積小被廣泛使用。
所以,docker容器中也存在loopback
機制,所以我們在容器中使用localhost
或者127.0.0.1
試圖訪問宿主機
的其它網路應用的時候,會失敗,因為localhost
和127.0.0.1
都是loopback
ip,所以訪問的是容器內部,請求不能到達宿主機。
docker啟動容器預設在乙個名為docker0
的bridge
網路裡,那麼我們就可以通過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.1
是docker0
的ip,那麼在容器內訪問172.18.0.1
就相當於訪問宿主機了。
既然容器內有loopbak
的存在,所以我們啟動應用的時候繫結hostname
就要避免localhost
和127.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,用於在乙個機器上管理容器。在特定網路條件下,攻擊者可...