Docker創建自定義網橋并指定網段

前言

docker0是Docker默認網絡的核心組件, 通過虛擬網橋和NAT技術, 實現了容器間的通信以及容器與外部網絡的交互。然而, docker0網段是固定的(通常是172.17.0.0/16), 為了更靈活地管理容器網絡,Docker支持創建自定義網橋,允許用戶指定網段。

例如, 在我以前做的一個單板仿真項目里, 每個容器用來模擬一塊板, 單板的IP需要設置為172.16.0.0/16, 和docker0網段不一致。 由于這個項目部署在每個開發的工作機上, 我們決定不直接修改docker0配置, 選擇了創建自定義網橋這種更靈活的方式。

Docker網橋的工作機制

Docker在主機上創建一個虛擬網橋(docker0), 每當啟動一個容器,Docker會自動創建一對虛擬網卡(veth pair), 其中一端放在容器內部作為它的網絡接口, 另一端則連接到主機上的這個虛擬網橋。 通過這種方式,容器之間可以通過網橋直接通信,數據包在網橋內轉發,不經過主機的物理網絡接口。

如果容器訪問的是外部網絡, 容器發出的數據包會先通過網橋到達主機, 然后主機通過NAT將容器的私有IP替換為自己的公網IP,從而讓數據包能夠順利發送到外部網絡。
請添加圖片描述

示例: 創建自定義網橋

創建自定義網橋br0, 網段為172.16.0.0/16, 創建一組容器連到網橋br0, 各容器通過eth1(172.16.0.0/16)可以互聯

創建自定義網橋br0

創建一個新的網橋br0, 為其分配子網172.16.0.254/24

sudo ip link add name br0 type bridge
sudo ip link set dev br0 up
sudo ip addr add 172.16.0.254/16 dev br0

啟動兩個容器并連接到docker0

啟動2個容器, 默認連接到docker0網橋

docker run -it -d --name container1 rockylinux:9.3 bash
docker run -it -d --name container2 rockylinux:9.3 bash

將容器的 eth1 連接到自定義網橋 br0

# 添加veth pair
ip link add veth1_a type veth peer name veth1_b
ip link set veth1_a master br0
ip link set veth1_a up# 把veth1_b移到容器的namespace
pid_container1=$(docker inspect -f '{{.State.Pid}}' container1)
ip link set veth1_b netns $pid_container1# veth1_b重命名為eth1
nsenter -t $pid_container1 -n ip link set veth1_b name eth1
nsenter -t $pid_container1 -n ip link set eth1 up# 為eth1分配地址
nsenter -t $pid_container1 -n ip addr add 172.16.1.1/16 dev eth1

另一個容器做類似操作

# 添加veth pair
ip link add veth2_a type veth peer name veth2_b
ip link set veth2_a master br0
ip link set veth2_a uppid_container2=$(docker inspect -f '{{.State.Pid}}' container2)
ip link set veth2_b netns $pid_container2nsenter -t $pid_container2 -n ip link set veth2_b name eth1
nsenter -t $pid_container2 -n ip link set eth1 upnsenter -t $pid_container2 -n ip addr add 172.16.1.2/16 dev eth1

效果:

容器A

# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.17.0.3  netmask 255.255.0.0  broadcast 172.17.255.255ether 02:42:ac:11:00:03  txqueuelen 0  (Ethernet)RX packets 127  bytes 188687 (184.2 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 121  bytes 9040 (8.8 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.16.1.1  netmask 255.255.0.0  broadcast 0.0.0.0inet6 fe80::4a5:69ff:feb8:acc0  prefixlen 64  scopeid 0x20<link>ether 06:a5:69:b8:ac:c0  txqueuelen 1000  (Ethernet)RX packets 125  bytes 10982 (10.7 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 106  bytes 9476 (9.2 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::1  prefixlen 128  scopeid 0x10<host>loop  txqueuelen 1000  (Local Loopback)RX packets 32  bytes 2688 (2.6 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 32  bytes 2688 (2.6 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         _gateway        0.0.0.0         UG    0      0        0 eth0
172.16.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth1
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0# ping 172.16.1.2
PING 172.16.1.2 (172.16.1.2) 56(84) bytes of data.
64 bytes from 172.16.1.2: icmp_seq=1 ttl=64 time=0.471 ms

容器B

# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)RX packets 27  bytes 2006 (1.9 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 9  bytes 626 (626.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.16.1.2  netmask 255.255.0.0  broadcast 0.0.0.0inet6 fe80::10b0:1aff:fe2f:766d  prefixlen 64  scopeid 0x20<link>ether 12:b0:1a:2f:76:6d  txqueuelen 1000  (Ethernet)RX packets 119  bytes 10386 (10.1 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 105  bytes 9406 (9.1 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::1  prefixlen 128  scopeid 0x10<host>loop  txqueuelen 1000  (Local Loopback)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0# ping 172.16.1.1
PING 172.16.1.1 (172.16.1.1) 56(84) bytes of data.
64 bytes from 172.16.1.1: icmp_seq=1 ttl=64 time=0.091 ms

參考

淺析docker容器網橋的實現原理以及docker的四種網絡模式和bridge模式的具體原理

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/72498.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72498.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/72498.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【向量數據庫Weaviate】 和Elasticsearch的區別

Weaviate 和 Elasticsearch 是兩種不同類型的數據庫&#xff0c;設計目標和應用場景有顯著差異。以下是它們的核心區別和適用場景的詳細對比&#xff1a; 1. 設計目標與核心能力 維度WeaviateElasticsearch核心能力向量數據庫 圖數據庫&#xff08;語義搜索優先&#xff09;全…

藍橋杯每日一題:第一周周四哞叫時間

藍橋杯每日一題&#xff1a;第一周周四哞叫時間 疑惑&#xff1a;如何把復雜度控制在Q&#xff08;n&#xff09;&#xff0c;怎么枚舉a和b&#xff0c;longlong的形式又該怎么輸入&#xff08;考慮用string&#xff09; 思路&#xff1a;枚舉倒數第二個b前面有多少個a 這是一…

在 macOS 使用 .pem 私鑰免密登錄騰訊云服務器

前言 在騰訊云上創建服務器時&#xff0c;如果選擇了「密鑰對」的登錄方式&#xff0c;就會得到一個 .pem 文件作為私鑰。很多小伙伴在使用 macOS 系統時&#xff0c;可能不清楚如何使用這個私鑰文件來 SSH 免密登錄遠程服務器。本文將詳細介紹如何在本地配置 .pem 私鑰文件并…

AI學習筆記:LM studio大模型加載參數說明

LM Studio加載大模型時參數設置頁面的常見參數及設置方法如下&#xff1a; 上下文長度&#xff08;Context Length&#xff09; 意義&#xff1a;表示模型可以處理的最大上下文長度&#xff0c;即模型一次能夠考慮的輸入文本的最大token數量。較大的上下文長度能讓模型更好地…

Spring項目中常用操作記錄

List 基礎操作 創建 // 使用 ArrayList&#xff08;基于動態數組&#xff0c;適合隨機訪問&#xff09; List<String> arrayList new ArrayList<>();// 使用 LinkedList&#xff08;基于鏈表&#xff0c;適合頻繁插入/刪除&#xff09; List<Integer> li…

騰訊 TDF 即將開源 Kuikly 跨端框架,Kotlin 支持全平臺

今天&#xff0c;在騰訊的 Shiply 平臺看 Flutter 動態化自研框架 Conch 時&#xff0c;在側邊欄看到了有「跨端開發框架」的介紹&#xff0c;點開發現有兩個產品&#xff1a; Hippy&#xff1a;面向前端技術棧的跨端開發框架&#xff0c;Web原生開發體驗&#xff0c;支持 Rea…

SQL AND OR 操作符詳解

SQL AND & OR 操作符詳解 在SQL(結構化查詢語言)中,AND 和 OR 是兩種非常重要的邏輯操作符,它們用于在查詢條件中組合多個條件。理解并正確使用這些操作符對于編寫有效的SQL查詢至關重要。 引言 在處理數據庫查詢時,我們常常需要根據多個條件來篩選數據。AND 和 OR…

nginx accesslog 打印自定義header

比如我在請求的header中添加了一個path-match-type&#xff0c;那我現在nginx的accesslog 中打印出來&#xff0c;應該如何配置呢&#xff1f; rootnginx-59f5d66df6-jw5k8:/# cat /etc/nginx/nginx.conf user nginx; worker_processes auto;error_log /var/log/nginx/erro…

響應式布局的設計規范

響應式設計&#xff08;Responsive Design&#xff09; 是一種 web 設計技術&#xff0c;旨在使網頁在不同的設備和屏幕尺寸上都有良好的顯示效果。響應式設計的核心思想是網頁的布局能夠根據設備的屏幕寬度、分辨率以及其他特性自動調整&#xff0c;使其適應桌面、平板和手機等…

說一下redis事務底層原理

Redis事務 1. 事務的基本流程 Redis 事務通過 MULTI、EXEC、WATCH 等命令實現&#xff0c;底層原理可以分為以下幾個步驟&#xff1a; (1) MULTI 命令 當客戶端發送 MULTI 命令時&#xff0c;Redis 會將客戶端標記為“事務模式”。在事務模式下&#xff0c;客戶端發送的所有…

【我的Android進階之旅】如何使用NanoHttpd在Android端快速部署一個HTTP服務器?

文章目錄 開篇:程序員的"摸魚神器"?一、為什么選擇NanoHttpd?二、五分鐘極速上車指南2.1 ? 第一步:引入依賴的哲學2.2 ? 第二步:創建服務器類:繼承大法好2.3 ? 第三步:啟動服務的儀式感三、高級玩法:讓服務器不再單調3.1 ?? 場景1:變身文件服務器3.2 ?…

播放器系列3——解碼

FFmpeg解碼過程詳解 解碼流程 #mermaid-svg-FGu92IEtteOdO2tO {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-FGu92IEtteOdO2tO .error-icon{fill:#552222;}#mermaid-svg-FGu92IEtteOdO2tO .error-text{fill:#5522…

SimPO算法-Simple Preference Optimizationwith a Reference-Free Reward

偏好優化&#xff08;preference optimization &#xff09;算法大全&#xff1a; 本篇介紹下SimPO SimPO&#xff08;Simple Preference Optimization&#xff09;的設計核心在于簡化偏好優化過程&#xff0c;同時提升模型的表現。其設計主要圍繞兩個關鍵點展開&#xff1a;長…

AIGC時代:如何快速搞定Spring Boot+Vue全棧開發

文章目錄 一、Spring Boot基礎二、Vue.js基礎三、Spring Boot與Vue.js集成四、性能優化與最佳實踐《快速搞定Spring BootVue全棧開發》 內容簡介作者簡介目錄前言/序言本書內容本書特點讀者對象 隨著人工智能生成內容&#xff08;AIGC&#xff09;技術的迅速發展&#xff0c;…

探秘基帶算法:從原理到5G時代的通信變革【六】CRC 校驗

文章目錄 2.5 CRC 校驗2.5.1 前言2.5.2 CRC算法簡介2.5.3 CRC計算的詳細過程2.5.4 CRC校驗的兩種方法詳解**分離比較法****整體運算法****不同位出錯與余數的關系****總結** 2.5.5 CRC計算的C實現及工具介紹**C實現CRC計算****CRC計算工具推薦** **2.5.6 總結&#xff1a;CRC校…

AUTOSAR微控制器抽象層(MCAL)詳解及綜合實例

目錄 1. 微控制器抽象層(MCAL)概述 1.1 MCAL的核心功能 1.2 MCAL的模塊劃分 1.3 MCAL的工作流程 2. MCAL的詳細功能解析 2.1 微控制器驅動 2.1.1 時鐘配置 2.1.2 電源管理 2.1.3 實例:時鐘配置 2.2 通信驅動 2.2.1 CAN驅動 2.2.2 實例:CAN通信的實現 2.3 I/O驅…

探究高空視頻全景AR技術的實現原理

1. 引言 筆者認為現階段AR技術的應用是還是比較坑爹的&#xff0c;大都是噱頭多但是實用的成分少&#xff0c;拿出來做做DEMO是可以&#xff0c;但是難以在實際的項目中落地產生實際的經濟價值。一方面是很難在業務上難以找到合適的應用場景&#xff08;可能管線相關的項目算一…

深度解析 | 2025 AI新突破,物理信息神經網絡(PINN):Nature級頂刊的「科研加速器」,70份源碼論文速取!

&#x1f525; 為什么全球頂尖實驗室都在押注PINN&#xff1f; 過去一年&#xff0c;物理信息神經網絡&#xff08;PINN&#xff0c;Physics-Informed Neural Networks&#xff09;以「現象級」姿態席卷科研圈&#xff1a;不僅在NeurIPS、ICML等頂會橫掃15%相關論文&#xff0c…

0基礎學前端---品優購項目Day14

0基礎學前端—品優購項目Day14 視頻參考&#xff1a;B站Pink老師 本節重點&#xff1a;all 項目鏈接&#xff1a;完整的項目已放到 品優購完整項目 大家可以自行下載 強調內容 這里主要強調兩個知識點&#xff1a; (1) 網站TDK三個標簽SEO優化 (2) logo SEO優化 網站TDK三個…

LeetCode熱題100JS(37/100)第七天|排序鏈表|合并K個升序鏈表|LRU緩存|二叉樹的中序遍歷|二叉樹的最大深度|對稱二叉樹

148. 排序鏈表 題目鏈接&#xff1a;???????148. 排序鏈表 難度&#xff1a;中等 刷題狀態&#xff1a;1刷 新知識&#xff1a; - dic.reduceRight((t,c)>(c.nextt,c),null) 方法從數組的末尾開始執行 解題過程 思考 示例 1&#xff1a; 輸入&#xff1a;head […