docker容器如何與宿主機通信


在宿主機(windows/mac/linux)安裝並啟動docker后,會自動創建3個docker network:bridge、host、none。可以用docker network ls命令查看。

用docker network inspect bridge、docker network inspect host、docker network inspect none命令查看各docker network,會發現只有bridge有網段,假如是

{
    "Subnet":"192.168.10.0/24",
    "Gateway":"192.168.10.1"
}

一、假如宿主機是linux系統,有一個監聽8000端口的其他進程

在宿主機上執行ifconfig命令,可以發現有一個docker0網卡,注意觀察其網段和docker network inspect bridge的網段是一致的,宿主機在此網段下也分配了一個ip,一般是網段中的第一個ip,假如是192.168.10.1。

1)假如用默認的bridge模式啟動容器,即在啟動時不指定network參數或者指定了--network bridge,

在容器中執行ifconfig命令,可以發現容器的ip也在上面的網段中,假如是192.168.10.2。

在容器中,ping 192.168.10.1,可以ping通。在宿主機中ping 192.168.10.2,可以ping通。

在容器中,可以用192.168.10.1:port的方式訪問宿主機的服務。

2)假如容器用host網絡模式啟動,即在啟動時添加了--netwok host參數,

那么容器會和宿主機共享網絡,直接telnet 127.0.0.1 8000可以telnet通。

 

二、假如宿主機是mac,有一個監聽8000端口的其他進程

宿主機不會有docker0網卡

1)假如用默認的bridge模式啟動容器

參考docker安裝nginx

2)假如容器用host網絡模式啟動

容器不能訪問mac宿主機的服務

3)用自定義的docker network模式啟動容器

在宿主機上執行docker network create n1,用docker network inspect n1命令查看,發現n1有一個新的網段,假如是

{
    "Subnet":"172.18.0.0/16",
    "Gateway":"172.18.0.1"
}

在啟動容器時指定--network n1

在容器中,指定ifconfig命令,可以看到容器的ip在n1的網段中,也可以看到容器的ip,假如是172.18.0.2。

在容器中ping 172.18.0.1,可以ping通。

在宿主機中ping 172.18.0.2,ping不通。在宿主機執行ifconfig命令,看不到n1。那么宿主機的ip是多少呢?

在容器中用host.docker.internal指代宿主機ip,可以通過在容器中執行ping host.docker.internal命令得到宿主機的ip。用gateway.docker.internal指代gateway,ping gateway.docker.internal可以獲取到網關地址。

在容器中,telnet host.docker.internal 8000是可以telnet通的。

 

三、假如宿主機windows系統

windows電腦就不要搞docker啦!費tm半天勁也搞不好


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM