在docker平臺裏有四種網絡模式,今天繼續分享一下它們的常用知識,進一步加深對docker技術的理解。
1、docker網絡模式分類
docker run創建Docker容器時,可以用--net選項指定容器的網絡模式,Docker主要有以下4種網絡模式。
- bridge模式:--net=bridge 橋接模式(默認設置,自己創建也使用bridge 模式)
- host模式:--net=host 和宿主即共享網絡
- container模式:--net=container:NAME_or_ID 容器網絡連通!(很少用,侷限性很大!)
- none模式:--net=none 不配置網絡
查看所有的docker網絡
命令:docker network ls
[root@iZwz9535z41cmgcpkm7i81Z ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
8ddb7e9846c6 bridge bridge local
48e785b7efb3 host host local
7e07c5b5ae34 none null local
2、bridge 網橋模式
Docker安裝啓動後會在宿主主機上創建一個名爲 docker0 的虛擬網橋,處於七層網絡模型的數據鏈路層,後續每當我們創建一個新的docker容器,在不指定容器網絡模式的情況下,docker會通過 docker0 與主機的網絡連接,docker0 相當於網橋。
使用 bridge 模式新創建的容器,容器內部都會有一個虛擬網卡,名爲 eth0,容器之間可以通過容器內部的IP相互通信。
命令:docker run -d -name tomcat01 --net=bridge -p 8085:80 tomcat:latest
說明:
- --net=bridge 可省略 ,-p 指定端口映射
- 網橋默認 IP 範圍是一般都是 172.17.x.x
3、host 模式
如果指定的host模式容器不會擁有一個獨立network namesace,而是與宿主主機共用network namesace。也就說明容器本身不會有的網卡信息,而是使用宿主主機的網絡信息。容器除了網絡,其他比如文件系統、進程等依然都是隔離的。
說明:
- --net=host 指定
- 容器和宿主主機共享 Network namespace
- host模式因爲和宿主主機共享network namespace,會有可能出現端口衝突的情況。
4、container模式
container模式和host模式很類似,host模式和宿主主機共享network namespace;container模式和指定的容器共享,兩者之間除了網絡共享(網卡、主機名、IP 地址),其他方面還是隔離的。
命令:docker run -d -name tomcat02 --net=container:name/id -p 8000:80 tomcat:latest
說明:
- –-net={容器id 或容器name} 指定
- 當前容器和另外一個容器共享 Network namespace
5、none模式
如果dockers容器指定的網絡模式爲none,該容器沒有辦法聯網,外界也無法訪問它,可以用來本次測試。
命令:docker run -d -name tomcat02 --net=none -p 8000:80 tomcat:latest
說明:
- --net=none 指定
- 容器有獨立的Network namespace,但並沒有對其進行任何網絡設置,如果需要的話,需要自定義配置網絡
Docker 網絡橋接模式和 Host 模式的區別
首先,我們需要了解一下 Docker 的兩種網絡模式之間的區別。在橋接網絡模式下,Docker 將爲每個容器創建一個獨立的網絡命名空間,併爲容器分配一個|P 地址。而在 Host 網絡模式下,容器將直接使用主機的網絡棧,與主機共享網絡接口和 IP 地址,這意味着容器可以直接訪問主機上的所有網絡服務,同時也會導致容器與主機網絡之間的隔離性降低。
Docker 網絡橋接改 Host
在使用 Docker 運行容器時,經常會涉及到網絡配置。默認情況下,Docker 使用橋接網絡模式來爲容器提供網絡連接。但有時候,我們可能需要將容器直接連接到主機的網絡,這時就需要將 Docker 網絡模式改爲 Host 模式。在本文中,我們將介紹如何通過改變 Docker 網絡橋接模式爲 Host 模式來實現容器直接連接到主機網絡的配置。
Docker 容器不能直接修改已創建的網絡模式爲 host。但是,你可以通過以下步驟來實現你的需求:
1. 停止當前運行的容器。
2. 刪除原有的容器。
3. 重新創建並指定網絡模式爲 host。
以下是一些可能的解決方案:
解決方案1:使用命令行
# 停止當前運行的容器
docker stop <container_id>
# 刪除原有的容器
docker rm <container_id>
# 重新創建並指定網絡模式爲 host
docker run --net=host --name=<container_name> <image_name>
解決方案2:使用Docker Compose
如果你使用Docker Compose來管理你的容器,你可以在你的docker-compose.yml文件中更改網絡模式,然後重新創建你的服務。
version: '3'
services:
your_service:
image: your_image
network_mode: host
然後運行以下命令來重新創建服務:
docker-compose up -d
注意:使用 host 網絡模式的容器將會使用宿主機的網絡,這意味着容器的網絡配置和DNS設置將與宿主機相同。這可能會導致網絡配置衝突,因此在使用 host 網絡模式前,請確保這是你想要的行爲。