当前位置: 首页 > news >正文

Docker网路模型(四)使用 bridge 网络

使用 bridge 网络

在计算机网络中,一个 bridge(网桥)是一个链路层设备,负责在不同的网段之间转发信息。 bridge 可以是真实的硬件设备也可以是由宿主机底层提供的软件模拟设备。

在 Docker 中,bridge 网络使用了软件虚拟的网桥,让连接到同一个桥上的容器能互相通讯的同时,也隔离了没有连接到同一个桥上的容器。Docker 的 bridge 网络驱动会自动在宿主机上安装好防火墙规则,隔离开不同网桥之间的直接通讯。

bridge 网络适用于同一个 Docker daemon 宿主机下的容器,对于不同主机之间的通讯,你可以自己在操作系统层面设置路由规则,或者是用 overlay 网络。

当你启动 Docker 的时候,一个默认的bridge网络 (也叫 bridge) 会自动创建(参考下文),跟着所有后面启动的容器除非自己有指定,否则都会自动连接到上面。你也可以创建一个自定义的 bridge 网络。用户定义的 bridge 网络要优于默认的 bridge  网络。

用户定义的 bridge 跟默认 bridge 的区别

  • 用户定义的 bridge 提供容器之间的自动 DNS 解析。

    在默认 bridge 下的容器只能通过 IP 地址访问彼此,除非使用 --link 选项,此选项已经标记为遗弃状态。而在用户定义的 bridge 网络,容器间可以通过主机名或者别名来解析彼此的地址。

    想象有一个应用栈,包含了一个网页前端跟一个数据库后端。假设你分别命名两种容器为 web 和 db ,无论应用栈在哪个 Docker 宿主机跑着,web 容器都能够连接 db 容器里面的数据库。

    如果你把这种应用栈跑在默认的 bridge 网络上,你就要手动给两种不同的容器加上链接(用遗弃的 --link 标志)。这些链接在链接的两个方向都要进行设置,可以想象超过两个以上的容器的情况会变得多么复杂。此外,你也可以修改容器里面的 /etc/hosts 文件,但这会产生难以调试的问题。

  • 用户定义的 bridge 提供了更好的隔离。

    所有不用 --network 标志的容器都会连接到默认的 bridge 网络上。这是有风险的,这种情况下不相关的 应用栈/服务/容器 能够直接通讯。

    而用户定义的 bridge 网络就能够提供限定范围的网络,只有连接到各自的 bridge 上的容器才能互通。

  • 容器能在用户定义的 bridge 上即时插拔。

    在容器的生命周期内,你可以在用户定义的 bridge 上即时插拔它们。而你要在默认的 bridge 上删除某个容器时,就需要先停掉容器,然后再重新用不同的网络选项去创建它。

  • 用户定义的网络提供了能灵活配置的 bridge。

    如果你的容器使用的是默认的 bridge,你也可以配置,但所有的容器都会使用同一个设置,比如 MTU 大小和 iptables 规则。此外,配置默认 bridge 网络是在 Docker 之外进行的,这就需要 Docker 来一次重启。

    而用户定义得 bridge 使用  docker network create 来创建和配置。如果有几组不同的应用需要用到不同的网络,你可以分别给他们创建和配置不同的 bridge。

  • 在默认 bridge 上所有的容器共享环境变量。

    一开始,在两个不同的容器之间共享环境变量,只有用 --link 标志一个办法。这样的变量在用户定义的 bridge 上是共享不了的。但是,我们有更好的办法去共享环境变量。举例:

    • 复数个容器可以用 Docker volume (卷),把共享信息挂载到容器里的某个文件或者路径下。

    • 复数个容器可以用 docker-compose 一起启动,然后可以在 compose file 里面定义共享的变量。

    • 你可以用 swarm 编排工具来管理容器,而不是单独启动,然后可以用上 swarm 的 secrets 和 configs 共享。

所有连接到同一个用户定义的 bridge 都有效地对彼此暴露所有端口。要想让在不同的网络上的容器或者非 Docker 主机能访问到某个端口,需要将此端口用 -p 或者--publish 标志给公开出来。

管理用户定义 bridge

用 docker network create 命令来创建一个用户定义 bridge 网络。

$ docker network create my-net

你可以指定子网掩码、IP地址范围、默认网关跟其他的选项。详情参考 docker network create 文档或者 docker network create --help 的输出。

使用 docker network rm 命令来移除一个用户定义 bridge 网络。如果上面有连着的容器,请先参考下文断连它们。

$ docker network rm my-net

这中间发生了什么?

当你创建或移除用户定义的 bridge 或在用户定义的 bridge 上连接或断开某些容器时,Docker 使用操作系统特有的工具来管理底层网络设施(比如在Linux上添加或移除网桥设备或配置  iptables 规则)。这些细节应看作是实现细节,让 Docker 来管理你的用户定义网络就好。

将某个容器连接到一个用户定义的 bridge 上

当你创建一个新的容器时,可以指定一个或者多个 --network 标志。此例子把一个 Nginx 容器连在了 my-net 网络上。同时把80端口公开在了宿主机的8080端口上,这样外部的客户端能够访问到这个端口。任何同样连接到 my-net 网络的其他容器,都能够访问到 my-nginx  容器的所有端口,反之亦然。

$ docker create --name my-nginx \--network my-net \--publish 8080:80 \nginx:latest

要将一个正在运行的容器连接到一个已有的用户定义 bridge,可使用 docker network connect 命令。下面的命令将一个已经跑起来的 my-nginx 容器连到了一个已有的 my-net 网络:

$ docker network connect my-net my-nginx

将某个容器从用户定义的 bridge 上断开

要将一个正在运行的容器从用户定义断开,可使用 docker network disconnect 命令。下面的命令将 my-nginx 容器从 my-net 网中断掉。

$ docker network disconnect my-net my-nginx

使用 IPv6

如果你在 Docker 容器中需要IPv6,那么在创建任意的 IPv6 网络跟给容器分配 IPv6 地址之前, 需要在 Docker daemon 层面 打开对应的选项 并重载配置。

在创建你的网络时,可以用 --ipv6 标志来开启 IPv6。你不能选择性地禁用默认 bridge 网络的 IPv6 支持。

启用从 Docker 容器到外部的转发功能

默认情况下,连接到默认 bridge 的容器的网络流量,不会转发到外部。要想启用转发,你需要修改两处设定。它们不是 Docker 命令,而是在 Docker 的宿主机的内核上生效的。

  1. 配置 Linux 内核,允许 IP 转发(IP forwarding)。

    $ sysctl net.ipv4.conf.all.forwarding=1
    
  2. 修改 iptables 的 FORWARD 策略,从 DROP 修改为 ACCEPT

    $ sudo iptables -P FORWARD ACCEPT
    

这些设置重启之后就没了,所以你可能需要把它们加到启动脚本里。

使用默认的 bridge 网络

默认的 bridge 网络可以看作是一个 Docker 快被遗弃的细节,不建议在生产环境中使用。配置它属于手动操作,而且它有技术缺陷(参考上面提到的两种 bridge 的不同)。

将某个容器连接到默认 bridge 上

如果你不用 --network 标志指定网络,而又指定了网络驱动,你的容器就会连接到默认 bridge 网络。连接到默认的 bridge 网络的容器是可以通讯的,但只能用 IP 地址来进行。除非你用准备遗弃的 --link 标志来连接他们。

配置默认的 bridge 网络

要配置默认的 bridge 网络, 你需要在 daemon.json 中指定选项。下面是一个指定了几个选项的  daemon.json 示例。只指定你需要改动的设置。

{"bip": "192.168.1.1/24","fixed-cidr": "192.168.1.0/25","fixed-cidr-v6": "2001:db8::/64","mtu": 1500,"default-gateway": "192.168.1.254","default-gateway-v6": "2001:db8:abcd::89","dns": ["10.20.1.2","10.20.1.3"]
}

重启 Docker 让这些改动生效。

在默认 bridge 网络上使用 IPv6

如果你将 Docker 配置了支持IPv6(参见上面的使用IPv6),默认 bridge 网络也会自动配置为IPv6。与用户定义的 bridge 不同,你不能在默认网桥上选择性地禁用IPv6。

接下来

  • 通关 独立的网络教程
  • 学习 容器视角的网络
  • 学习 overlay 网络
  • 学习 Macvlan 网络

相关文章:

Docker网路模型(四)使用 bridge 网络

使用 bridge 网络 在计算机网络中,一个 bridge(网桥)是一个链路层设备,负责在不同的网段之间转发信息。 bridge 可以是真实的硬件设备也可以是由宿主机底层提供的软件模拟设备。 在 Docker 中,bridge 网络使用了软件…...

数据结构与算法之美 | 排序(2)

归并排序(Merge Sort) 基本思想: 如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。 def merge_sort…...

【外企面试系列】必备口语短语与例句 - A系列

a big headache令人头痛的事情 I have a big headache from all the noise. (我因为噪音而头痛。)The paperwork is a big headache for me. (对我来说,文书工作是件头痛的事情。) a fraction of 一部分 She ate only a fraction of her meal. (她只吃了一部分饭…...

Java使用Opencv进行大图找小图并使用其找图功能进行bilibili视频下载案例

Java使用Opencv进行大图找小图并使用其找图功能进行bilibili视频下载案例 一、Opencv大图找小图说明二、Opencv的window安装1.下载windows下的安装包2.安装3.Java中Opencv加载测试 三、Java中通过Opencv进行模板匹配大图找小图四、进行多图查找五:案例下载bilibili视…...

肠道健康从核心菌属开始:肠道菌群的关键

谷禾健康 5月29日,是世界肠道健康日。肠道是人体最重要的消化系统之一,与人体健康紧密相关。而肠道菌群作为肠道重要组成部分,在肠道健康中发挥着重要的作用。 编辑​ 由于基因、环境、饮食、药物等因素的影响,每个人的肠道菌群都…...

深度学习实战37-NASNet(具有自动搜索能力的神经网络模型)的搭建与实战应用

大家好,我是微学AI,今天给大家介绍一下深度学习实战37-NASNet(具有自动搜索能力的神经网络模型)的搭建与实战应用,NASNet是由Google Brain团队开发的一种具有自动搜索能力的神经网络模型,利用强化学习和进化算法等技术来自动地搜索最优的神经网络架构。NASNet模型的设计灵感…...

碳排放预测模型 | Python实现基于机器学习回归分析的碳排放预测模型——随机森林、决策树、KNN 和多层感知器 (MLP) 预测分析

文章目录 效果一览文章概述研究内容环境准备源码设计KNNRandom ForestDecision TreeMLPModel Evaluation学习总结参考资料效果一览...

人体检测技术之毫米波雷达

人体检测技术之毫米波雷达 1.概述 智能人脸/视频锁领域的人体检测需求是要求远距离达到1m左右即可,一旦在此距离内检测人,则锁唤醒进行人脸识别,视频录制等操作。所以,人体检测技术非常关键。 选型主要是几个维度: 1.支持检测的距离范围,能否准确输出距离信息 2.支持…...

“Chain of Thought Reasoning“ 和 “Chain Prompts“ 是什么

"Chain of Thought Reasoning" 和 "Chain Prompts" 是什么 1. "Chain Prompts" 是什么2. “Chain of Thought Reasoning” 是什么 1. “Chain Prompts” 是什么 “Chain Prompts” 是指一系列相关的提示,它们之间有逻辑上的联系和依赖关系。用户…...

signal

读信号,dqs 是对齐到dq的边沿, 写信号,dqs 的边沿是对到中间的。 spec 就是这样规定的。我们在dq的最中间的采样,肯定是最安全的。 dqs 是对齐到dq的边沿 , 在silicon 内部,还是通过移位完成的。 rl: re…...

深度研究微软的资产负债表和财务状况以及未来投资价值

来源:猛兽财经 作者:猛兽财经 微软股票的关键指标 猛兽财经认为,微软公布的2023财年第三季度财务业绩,有三个关键指标值得投资者关注。 第一个关键指标是利息收入。微软的利息收入目前已经同比增长了44%,从2022财年第…...

Mac电脑删除第三方软件工具CleanMyMac X

经常使用Mac的人都知道,Mac除了可以在AppStore下载应用程序,还有许多软件是需要在网页上搜索下载的第三方软件。那么这类第三方软件软件除了下载方式不同之外还有什么是和从App store下载的软件有区别的吗?答案是肯定的,那就是这些…...

leetcode174. 地下城游戏(java)

地下城游戏 leetcode174. 地下城游戏题目描述 动态规划解题思路代码 动态规划专题 leetcode174. 地下城游戏 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/dungeon-game 题目描述 恶魔们抓住了公主并将她关在了地下城 …...

信号与系统复习笔记——傅里叶变换

信号与系统复习笔记——傅里叶变换 周期信号的傅里叶级数表示 特征函数 假设LTI系统的输入为 x ( t ) e s t x(t) e^{st} x(t)est 输出为: y ( t ) e s t ∗ h ( t ) ∫ − ∞ ∞ e s ( t − τ ) h ( τ ) d τ e s t ∫ − ∞ ∞ e − s τ h ( τ ) d…...

Allegor17.2版本WIN11系统CIS配置提示错误解决方案

错误提示: ERROR(ORCIS-6250): Unable to continue. Database access failed. Contact the database administrator to correct the following error(s), and then retry. ODBC Error Code: -1 Description: 在指定的 DSN 中,驱动程序和应用程序之间的体…...

Java设计模式七大原则-合成聚合复用原则

🧑‍💻作者:猫十二懿 ❤️‍🔥账号:CSDN 、掘金 、个人博客 、Github 🎉公众号:猫十二懿 合成-聚合复用原则 1、合成-聚合复用原则介绍 合成/聚合复用原则(Composition/Aggregatio…...

SOFA Weekly|可信基础设施技术分论坛、Layotto 社区会议回顾与预告、社区本周贡献...

SOFA WEEKLY | 每周精选 筛选每周精华问答,同步开源进展 欢迎留言互动~ SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件&am…...

Melody 监控(四十九)

当新的世界出现,请立即向他奔去 上一章简单介绍了Spring Boot Actuator详解(四十八), 如果没有看过,请观看上一章 一. JavaMelody 一.一 什么是 Java Melody JavaMelody是一个方便的Java或JavaEE Web 应用程序监控工具。 它允许自动存储由 Web 应用程序的实际操…...

Shell脚本管道符常用搭配命令

1.sort sort命令——以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。 sort [选项] 文件名 cat file | sort [选项] 常用选项 选项作用-n按照数字进行…...

基于html+mysql+Spring+mybatis+Springboot的Springboot宠物医院管理系统

运行环境: 最好是java jdk 1.8,我在这个平台上运行的。其他版本理论上也可以。 IDE环境: Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以,如果编译器的版本太低,需要升级下编译器,不要弄太低的版本 tomcat服务器环…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

Map相关知识

数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

2023赣州旅游投资集团

单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...