docker 訪問宿主機網絡


使用宿主機IP

在安裝Docker的時候,會在宿主機安裝一個虛擬網關docker0,我們可以使用宿主機在docker0上的IP地址來代替localhost

首先,使用如下命令查詢宿主機IP地址:

ifconfig

可以發現宿主機的IP是172.17.0.1,那么將proxy_pass http://localhost:1234改為proxy_pass http://172.17.0.1:1234就可以解決502 Bad Gateway錯誤。

但是,不同系統下宿主機的IP是不同的,例如Linux下一般是172.17.0.1, macOS下一般是192.168.65.1,並且這個IP還可以更改。所以使用IP配置nginx.conf,不能跨環境通用。

使用host網絡

Docker容器運行的時候有hostbridgenone三種網絡可供配置。默認是bridge,即橋接網絡,以橋接模式連接到宿主機;host是宿主網絡,即與宿主機共用網絡;none則表示無網絡,容器將無法聯網。

當容器使用host網絡時,容器與宿主共用網絡,這樣就能在容器中訪問宿主機網絡,那么容器的localhost就是宿主機的localhost

在docker中使用--network host來為容器配置host網絡:

docker run -d --name nginx --network host nginx

上面的命令中,沒有必要像前面一樣使用-p 80:80 -p 443:443來映射端口,是因為本身與宿主機共用了網絡,容器中暴露端口等同於宿主機暴露端口。

使用host網絡不需要修改nginx.conf,仍然可以使用localhost,因而通用性比上一種方法好。但是,由於host網絡沒有bridge網絡的隔離性好,使用host網絡安全性不如bridge高。

總結

本文提出了使用宿主機IP和使用host網絡兩種方法,來實現從容器中訪問宿主機的網絡。兩種方法各有優劣,使用宿主機IP隔離性更好,但通用性不好;使用host網絡,通用性好,但帶來了暴露宿主網絡的風險


免責聲明!

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



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