docker修改容器網(wǎng)絡(luò)舉例詳解
1.docker網(wǎng)絡(luò)模式分類
docker run創(chuàng)建Docker容器時,可以用--net選項指定容器的網(wǎng)絡(luò)模式,Docker主要有以下4種網(wǎng)絡(luò)模式。
- bridge模式:--net=bridge 橋接模式(默認(rèn)設(shè)置,自己創(chuàng)建也使用bridge 模式)
- host模式:--net=host 和宿主即共享網(wǎng)絡(luò)
- container模式:--net=container:NAME_or_ID 容器網(wǎng)絡(luò)連通!(很少用,局限性很大!)
- none模式:--net=none 不配置網(wǎng)絡(luò)
2.查詢所有網(wǎng)絡(luò)
命令: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
bridge 網(wǎng)橋模式
Docker安裝啟動后會在宿主主機上創(chuàng)建一個名為 docker0 的虛擬網(wǎng)橋,處于七層網(wǎng)絡(luò)模型的數(shù)據(jù)鏈路層,后續(xù)每當(dāng)我們創(chuàng)建一個新的docker容器,在不指定容器網(wǎng)絡(luò)模式的情況下,docker會通過 docker0 與主機的網(wǎng)絡(luò)連接,docker0 相當(dāng)于網(wǎng)橋。
使用 bridge 模式新創(chuàng)建的容器,容器內(nèi)部都會有一個虛擬網(wǎng)卡,名為 eth0,容器之間可以通過容器內(nèi)部的IP相互通信。
命令:docker run -d -name tomcat01 --net=bridge -p 8085:80 tomcat:latest
說明:
- --net=bridge 可省略 ,-p 指定端口映射
- 網(wǎng)橋默認(rèn) IP 范圍是一般都是 172.17.x.x
host 模式
如果指定的host模式容器不會擁有一個獨立network namesace,而是與宿主主機共用network namesace。也就說明容器本身不會有的網(wǎng)卡信息,而是使用宿主主機的網(wǎng)絡(luò)信息。容器除了網(wǎng)絡(luò),其他比如文件系統(tǒng)、進(jìn)程等依然都是隔離的。
說明:
- --net=host 指定
- 容器和宿主主機共享 Network namespace
- host模式因為和宿主主機共享network namespace,會有可能出現(xiàn)端口沖突的情況。
container模式
container模式和host模式很類似,host模式和宿主主機共享network namespace;container模式和指定的容器共享,兩者之間除了網(wǎng)絡(luò)共享(網(wǎng)卡、主機名、IP 地址),其他方面還是隔離的。
命令:docker run -d -name tomcat02 --net=container:name/id -p 8000:80 tomcat:latest
說明:
- –-net={容器id 或容器name} 指定
- 當(dāng)前容器和另外一個容器共享 Network namespace
none模式
如果dockers容器指定的網(wǎng)絡(luò)模式為none,該容器沒有辦法聯(lián)網(wǎng),外界也無法訪問它,可以用來本次測試。
命令:docker run -d -name tomcat02 --net=none -p 8000:80 tomcat:latest
說明:
- --net=none 指定
- 容器有獨立的Network namespace,但并沒有對其進(jìn)行任何網(wǎng)絡(luò)設(shè)置,如果需要的話,需要自定義配置網(wǎng)絡(luò)
更改網(wǎng)絡(luò)
###解除容器綁定的網(wǎng)絡(luò) 網(wǎng)絡(luò)名詞mynetwork 容器名稱 lnmp [root@lnmp tp6cms]# docker network disconnect mynetwork lnmp ##刪除原先的網(wǎng)絡(luò) [root@lnmp tp6cms]# docker network rm mynetwork ##重新創(chuàng)建容器網(wǎng)絡(luò) [root@lnmp tp6cms]# docker network create --subnet=192.168.222.0/24 mynetwork 7d40e0be1fcade91f8109a54a05bf0f012584e0bbb9449bec5335db247efd0be ##為容器重新指定網(wǎng)絡(luò) [root@lnmp tp6cms]# docker network connect mynetwork lnmp ##重新啟動容器 [root@lnmp tp6cms]# docker container restart lnmp
Docker 網(wǎng)絡(luò)橋接模式和 Host 模式的區(qū)別
首先,我們需要了解一下 Docker 的兩種網(wǎng)絡(luò)模式之間的區(qū)別。在橋接網(wǎng)絡(luò)模式下,Docker 將為每個容器創(chuàng)建一個獨立的網(wǎng)絡(luò)命名空間,并為容器分配一個|P 地址。而在 Host 網(wǎng)絡(luò)模式下,容器將直接使用主機的網(wǎng)絡(luò)棧,與主機共享網(wǎng)絡(luò)接口和 IP 地址,這意味著容器可以直接訪問主機上的所有網(wǎng)絡(luò)服務(wù),同時也會導(dǎo)致容器與主機網(wǎng)絡(luò)之間的隔離性降低。
Docker 網(wǎng)絡(luò)橋接改 Host
在使用 Docker 運行容器時,經(jīng)常會涉及到網(wǎng)絡(luò)配置。默認(rèn)情況下,Docker 使用橋接網(wǎng)絡(luò)模式來為容器提供網(wǎng)絡(luò)連接。但有時候,我們可能需要將容器直接連接到主機的網(wǎng)絡(luò),這時就需要將 Docker 網(wǎng)絡(luò)模式改為 Host 模式。在本文中,我們將介紹如何通過改變 Docker 網(wǎng)絡(luò)橋接模式為 Host 模式來實現(xiàn)容器直接連接到主機網(wǎng)絡(luò)的配置。
Docker 容器不能直接修改已創(chuàng)建的網(wǎng)絡(luò)模式為 host。但是,你可以通過以下步驟來實現(xiàn)你的需求:
1. 停止當(dāng)前運行的容器。
2. 刪除原有的容器。
3. 重新創(chuàng)建并指定網(wǎng)絡(luò)模式為 host。
以下是一些可能的解決方案:
解決方案1:使用命令行
# 停止當(dāng)前運行的容器 docker stop <container_id> # 刪除原有的容器 docker rm <container_id> # 重新創(chuàng)建并指定網(wǎng)絡(luò)模式為 host docker run --net=host --name=<container_name> <image_name>
解決方案2:使用Docker Compose
如果你使用Docker Compose來管理你的容器,你可以在你的docker-compose.yml文件中更改網(wǎng)絡(luò)模式,然后重新創(chuàng)建你的服務(wù)。
version: '3' services: your_service: image: your_image network_mode: host
然后運行以下命令來重新創(chuàng)建服務(wù):
docker-compose up -d
注意:使用 host 網(wǎng)絡(luò)模式的容器將會使用宿主機的網(wǎng)絡(luò),這意味著容器的網(wǎng)絡(luò)配置和DNS設(shè)置將與宿主機相同。這可能會導(dǎo)致網(wǎng)絡(luò)配置沖突,因此在使用 host 網(wǎng)絡(luò)模式前,請確保這是你想要的行為。
總結(jié)
到此這篇關(guān)于docker修改容器網(wǎng)絡(luò)的文章就介紹到這了,更多相關(guān)docker修改容器網(wǎng)絡(luò)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解使用Docker搭建Java Web運行環(huán)境
本篇文章主要介紹了使用Docker搭建Java Web運行環(huán)境,現(xiàn)在分享給大家,也給大家做個參考。感興趣的小伙伴們可以參考一下。2016-11-11docker-compose up -d和docker-compose up -
本文主要介紹了docker-compose up -d和docker-compose up --build的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07