Docker 網絡 - host 模式
容器與主機、容器與容器之間是互相隔離的。同時,我們可以通過配置 docker 網絡,為容器創建完全獨立的網絡命名空間,或者使容器共享主機或者其他容器的網絡命名空間,以應對不同場景的需要。
這里有4 種常用的單宿主機網絡模式:
- bridge 模式;
- host 模式;
- container 模式;
- none 模式。
本節將介紹網絡模式中的 host 模式。
1. host 模式
host 模式下啟動的容器,網絡不再與宿主機隔離,訪問容器服務可以直接使用訪問宿主機對應的網絡端口,且不需要端口轉發。
網絡拓撲圖如下:
以 host 模式啟動 nginx 的容器 h0:
docker run -d -t --network host --name h0 nginx
啟動成功后,在瀏覽器輸入任意的本機地址,都可以打開 nginx 的默認頁面,訪問宿主機 80 端口就是訪問容器的 80 端口,它們是一致的。
以 host 模式啟動 nginx 的容器 h1:
docker run -d -t --network host --name h1 nginx
使用 docker ps -a
命令查看所有容器,發現 h1 容器沒有運行:
使用 docker logs h1
查看容器 h1 的日志,發現,由于宿主機 80 端口已經被 h0 容器的服務占用,使得 h1 無法獲取到 此端口,導致無法正常啟動。
我們在學習過程中,不再使用的容器記得刪除掉,釋放資源和空間
docker rm -f h0 h1
2. 小結
host 模式下的容器與宿主機共享同一個網絡環境,容器可以使用宿主機的網卡和外界的通信,不需要轉發拆包,性能好。但 host 模式也有非常嚴重的缺點:容器沒有隔離的網絡,會與其他服務競爭宿主機的網絡,導致宿主機網絡狀態不可控,因此無法用在生產環境。