Docker網(wǎng)絡(luò)配置(橋接網(wǎng)絡(luò)和自定義網(wǎng)絡(luò))自定義網(wǎng)絡(luò)設(shè)置ip方式
前言:Docker網(wǎng)絡(luò)模式
當(dāng)你安裝了docker,它會(huì)自動(dòng)創(chuàng)建3個(gè)網(wǎng)絡(luò)模式,
可以使用 docker network ls 命令來(lái)查看所有網(wǎng)絡(luò)
效果圖:

bridge橋接模式host主機(jī)模式none表示沒(méi)有網(wǎng)絡(luò),我們?nèi)萜饕话愣夹枰?lián)網(wǎng)的,這個(gè)模式我們可以忽略它
一、bridge(橋接網(wǎng)絡(luò))
當(dāng)Docker進(jìn)程啟動(dòng)時(shí),會(huì)在主機(jī)上創(chuàng)建一個(gè)名為docker0的虛擬網(wǎng)橋(路由器),此主機(jī)上啟動(dòng)的Docker容器會(huì)連接到這個(gè)虛擬網(wǎng)橋上。
使用 ifconfig 查看docker0虛擬網(wǎng)橋

虛擬網(wǎng)橋的工作方式和物理交換機(jī)類(lèi)似,這樣主機(jī)上的所有容器就通過(guò)交換機(jī)連在了一個(gè)二層網(wǎng)絡(luò)中。
從docker0子網(wǎng)中分配一個(gè)IP給容器使用,并設(shè)置docker0的IP地址為容器的默認(rèn)網(wǎng)關(guān)。
在主機(jī)上創(chuàng)建一對(duì)虛擬網(wǎng)卡veth pair設(shè)備,Docker將veth pair設(shè)備的一端放在新創(chuàng)建的容器中,并命名為eth0(容器的網(wǎng)卡),另一端放在主機(jī)中,以vethxxx這樣類(lèi)似的名字命名,并將這個(gè)網(wǎng)絡(luò)設(shè)備加入到docker0網(wǎng)橋中。注:bridge為默認(rèn)模式,創(chuàng)建容器的時(shí)候不需要使用參數(shù)--net去指定, 這種模式會(huì)為每個(gè)容器分配一個(gè)獨(dú)立的Network Namespace(網(wǎng)絡(luò)空間)
同一個(gè)宿主機(jī)上的所有容器會(huì)在同一個(gè)網(wǎng)段下,相互之間是可以通信的
其它模式需要在創(chuàng)建容器時(shí)使用--net去指定
1.查看bridge信息
docker inspect bridge
注:inspect是docker 里面用來(lái)查看詳情的指令
我只截了容器的部分
圖中 c1 b1 c2 都是我創(chuàng)建的容器 可以看到每個(gè)容器都分配到了一個(gè)ip
效果圖:

2.創(chuàng)建一個(gè)容器查看IP
創(chuàng)建容器的指令
docker run -it --name bug centos
注:run意思是創(chuàng)建運(yùn)行并進(jìn)入
-itd:是三個(gè)參數(shù)-i:interactive容器具有交互功能-t:容器將提供偽終端- --name 給容器取名字 , centos 鏡像名稱(chēng)
我們?cè)谌萜骼锩鎴?zhí)行 ip addr 查看容器 ip

上面是網(wǎng)關(guān)的IP ,下面是容器的的IP
docker0就像是一個(gè)路由器,容器就像是路由器下的設(shè)備,它們?cè)谕粋€(gè)網(wǎng)段內(nèi),可以互相ping

bridge(橋接網(wǎng)絡(luò))需要映射端口,外部才能訪問(wèn)到容器
3.外部訪問(wèn)
沒(méi)主機(jī)的模式下面我們需要端口映射外部才能訪問(wèn)
設(shè)置端口映射
docker run -it --name bridge03 -p 444:8080 jdk7:v1
-p:把宿主機(jī)的4444端口映射到容器的8080端口
用 java -jar spring.jar --server.port=8080 啟動(dòng)8080端口


-p參數(shù)可以出現(xiàn)多次,綁定多個(gè)端口號(hào)
docker run -itd --name bridge05 -p 8082:8080 -p 8083:8080 spring:1.0
二、Host模式(主機(jī)模式)
如果啟動(dòng)容器的時(shí)候使用host模式,那么這個(gè)容器將不會(huì)獲得一個(gè)獨(dú)立的Network Namespace,而是和宿主機(jī)共用一個(gè)Network Namespace。
容器將不會(huì)虛擬出自己的網(wǎng)卡,配置自己的IP等,而是使用宿主機(jī)的IP和端口。
但是,容器的其他方面,如文件系統(tǒng)、進(jìn)程列表等還是和宿主機(jī)隔離的
Host模式是不需要映射端口的,假設(shè)容器開(kāi)了8080端口,那么主機(jī)肯定也是8080端口,不需要映射直接就可以訪問(wèn)
1.使用Host模式創(chuàng)建容器
使用Host模式創(chuàng)建容器
docker run -it --name host01 --net=host centos
注:run意思是創(chuàng)建運(yùn)行并進(jìn)入
-itd:是三個(gè)參數(shù)-i:interactive容器具有交互功能-t:容器將提供偽終端- --name 給容器取名字 ,--net=host 指定使用的網(wǎng)絡(luò)模式 centos 鏡像名稱(chēng)
創(chuàng)建之后 使用 ip addr 查看容器ip
和主機(jī)的IP是一模一樣的


在容器中運(yùn)行8080端口:
2.用host容器外部訪問(wèn)
重新創(chuàng)建·一個(gè)host容器并掛載一個(gè)目錄,目錄里面有運(yùn)行8080端口的服務(wù)
docker run -it -v /root:/aa --net host jdk:v3
容器創(chuàng)建之后自動(dòng)運(yùn)行目錄里的8080服務(wù)

外部訪問(wèn)成功!

三、創(chuàng)建自定義網(wǎng)絡(luò)(自定義IP)
使用默認(rèn)的網(wǎng)橋模式,分配給容器的IP會(huì)變,
假設(shè):
- 容器aa原本的IP是177.14.1.2
- 容器bb原本的IP是177.14.1.3
aa和bb兩個(gè)容器同時(shí)關(guān)閉,容器bb先啟動(dòng)了,那么它的IP就變成了177.14.1.2,我們可以是用自定義網(wǎng)絡(luò)來(lái)解決這樣的情況,自定義網(wǎng)絡(luò)可以IP固定
必須先要?jiǎng)?chuàng)建一個(gè)網(wǎng)段,在同一個(gè)網(wǎng)段下,才能進(jìn)行訪問(wèn)
1.創(chuàng)建一個(gè)自定義網(wǎng)絡(luò)
docker network create --subnet 網(wǎng)絡(luò)名稱(chēng) --subnet :設(shè)置網(wǎng)段 docker network create --subnet 172.18.0.0/16 ots

172.18.0.0/16:給自定義網(wǎng)絡(luò)劃分的網(wǎng)段
使用 docker network ls 查看剛剛創(chuàng)建的自定義網(wǎng)絡(luò)

固定ip啟動(dòng),
2.容器使用自定義網(wǎng)絡(luò)
自定義網(wǎng)絡(luò)可以自定義ip,默認(rèn)網(wǎng)絡(luò)是不能指定IP的
docker run -it --name net01 --net ots --ip 172.18.0.3 jdk7:v1.0 --ip:指定ip

3.在創(chuàng)建一個(gè)容器互相ping一下
docker run -it --name net02 --net ots --ip 172.18.0.4 jdk7:v1.0

可以ping成功,因?yàn)樵谕痪W(wǎng)段下
4.跨網(wǎng)橋測(cè)試
創(chuàng)建一個(gè)容器,默認(rèn)的網(wǎng)橋模式,容器的ip是172.17.0.2

在里面ping一下自定義網(wǎng)絡(luò)容器 IP是 172.18.0.3

是不能ping通的
在同一個(gè)網(wǎng)段下,才能進(jìn)行訪問(wèn)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
CentOS 7下設(shè)置Docker代理(Linux下Systemd服務(wù)的環(huán)境變量配置)
本文給大家分享Linux下Systemd服務(wù)的環(huán)境變量配置方法,此示例將覆蓋默認(rèn)docker.service文件,對(duì)CentOS 7下設(shè)置Docker代理的相關(guān)知識(shí)感興趣的朋友跟隨小編一起看看吧2021-05-05
Docker中安裝Redis并開(kāi)啟遠(yuǎn)程訪問(wèn)的詳細(xì)步驟
這篇文章主要介紹了Docker中安裝Redis并開(kāi)啟遠(yuǎn)程訪問(wèn)的詳細(xì)步驟,文中有詳細(xì)的代碼示例供大家參考,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2025-01-01
解決Docker啟動(dòng)Elasticsearch7.x報(bào)錯(cuò)的問(wèn)題
這篇文章主要介紹了解決Docker啟動(dòng)Elasticsearch7.x報(bào)錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
docker安裝opengauss數(shù)據(jù)庫(kù)配置過(guò)程詳解
這篇文章主要為大家介紹了docker安裝opengauss數(shù)據(jù)庫(kù)配置過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
Rancher實(shí)現(xiàn)查看Pod日志實(shí)踐
文章介紹了Rancher的組成部分和容器日志查看的實(shí)現(xiàn)方式,提到了Rancher的架構(gòu)、ui組件以及通過(guò)websocket連接獲取容器日志的方法2026-03-03
Docker?部署?Minio?對(duì)象存儲(chǔ)服務(wù)器的過(guò)程詳解
Minio是一個(gè)輕量級(jí)的應(yīng)用程序,可以在各種環(huán)境中運(yùn)行,包括公共云、私有云和混合云,這篇文章主要介紹了Docker?部署?Minio?對(duì)象存儲(chǔ)服務(wù)器的過(guò)程詳解,需要的朋友可以參考下2024-07-07
ubuntu 22.04安裝docker的詳細(xì)過(guò)程
這篇文章主要介紹了ubuntu 22.04安裝docker的詳細(xì)過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2025-04-04

