docker 內部如何訪問宿主機

我是天上逍遙的仙 發表於2019-08-23

Docker For Mac沒有docker0網橋

在使用Docker時,要注意平臺之間實現的差異性,如Docker For Mac的實現和標準Docker規範有區別,Docker For Mac的Docker Daemon是執行於虛擬機器(xhyve)中的, 而不是像Linux上那樣作為程式執行於宿主機,因此Docker For Mac沒有docker0網橋,不能實現host網路模式,host模式會使Container複用Daemon的網路棧(在xhyve虛擬機器中),而不是與Host主機網路棧,這樣雖然其它容器仍然可通過xhyve網路棧進行互動,但卻不是用的Host上的埠(在Host上無法訪問)。bridge網路模式 -p 引數不受此影響,它能正常開啟Host上的埠並對映到Container的對應Port。文件在這一點上並沒有充分說明,容易踩坑。

docker 18.03 加入了一個 feature,在容器中可以通過 host.docker.internal來訪問主機
Use your internal IP address or connect to the special DNS name host.docker.internal which will resolve to the internal IP address used by the host.

linux

有時候就需要在docker容器裡訪問宿主機提供的服務。
例如容器裡的應用需要訪問宿主機的mysql服務。

方案一:
宿主機執行ifconfig
會看到docker0那個ip,可以使用來訪問宿主機

方案二:
docker 18.03 加入了一個 feature,在容器中可以通過 host.docker.internal來訪問主機
Use your internal IP address or connect to the special DNS name host.docker.internal which will resolve to the internal IP address used by the host.

siya