docker 訪問宿主機網絡

使用宿主機IP

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

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

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,不能跨環境通用。spa

使用host網絡

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

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

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

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

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

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

總結

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

相關文章
相關標籤/搜索