Docker的网络模式

Docker网络模式详解 文章目录一、docker网络概述1、docker网络实现的原理二、 docker的网络模式1、默认网络2、使用docker run 创建Docker容器时,可以用--net或--network 选项指定容器的网络模式三、docker网络模式详解1、host模式2、container模式3、none模式4、bridge模式5、自定义网络模式 一、docker网络概述 1、docker网络实现的原理 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器 阅读详情

一、Bridge桥接模式
  bridge网络模式是Docker容器的默认网络模式,它可以使用一个Linux bridge设备,默认为docker0;利用veth0,一头连接在容器的网络namespace中,另一头在docker0上,互相连接来进行通信,在该模式下Docker Container不具有一个公有IP,因为宿主机的IP地址与veth pair的ip地址不在同一网段内;Docker采用NAT转换的方式,将容器内部的服务监听的端口与宿主机的某一个端口进行"绑定",使得宿主机以外的世界可以主动将网络报文发送至容器内部,外界访问容器内的服务时,需要访问宿主机的IP以及宿主机的端口。
  在这里插入图片描述

# 查看网络模式信息
[root@docker ~]# docker network  ls 
NETWORK ID          NAME                DRIVER              SCOPE
2448303ed0fc        bridge              bridge              local
583184b1f8e0        harbor_harbor       bridge              local
ff35fa4400e4        host                host                local
1af23f0e55b5        none                null                local


# 查看bridge桥接模式的网络信息
[root@docker ~]# docker inspect network bridge 
[
    {
        "Name": "bridge",
        "Id": "2448303ed0fc762762aa15214cbf802d0d3032521f88e3cc46054093fcb18249",
        "Created": "2019-09-28T14:51:41.530125413+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]

自定义桥设备:

# 创建一个名为mybr0的桥接设备
[root@docker ~]# docker network create -d bridge --subnet "172.27.0.0/16" --gateway "172.27.0.1" mybr0
3342336ee16ac5c8dda3263370b334ac97c7d5a7d7a2ac258fc0a920389372b4
[root@docker ~]# docker network ls 
NETWORK ID          NAME                DRIVER              SCOPE
2448303ed0fc        bridge              bridge              local
583184b1f8e0        harbor_harbor       bridge              local
ff35fa4400e4        host                host                local
3342336ee16a        mybr0               bridge              local
1af23f0e55b5        none                null                local


# 查看mybr0设备的详细信息
[root@docker ~]# docker   network  inspect mybr0 
[
    {
        "Name": "mybr0",
        "Id": "3342336ee16ac5c8dda3263370b334ac97c7d5a7d7a2ac258fc0a920389372b4",
        "Created": "2019-09-28T15:16:16.939025763+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.27.0.0/16",
                    "Gateway": "172.27.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

启用一个此模式的容器:

# 创建一个名为myweb01的nginx容器;--network可指明使用的桥设备
[root@docker ~]# docker run --name myweb01  -d  --network mybr0 -p 8080:80  nginx      
597f307f2559c887b3f37cfe8e233a5f81554e00fa0afbf7cdea2af9b83e162e

# 查看myweb01的详细信息
[root@docker ~]# docker   inspect   myweb01 
"mybr0": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "597f307f2559"
                    ],
                    "NetworkID": "3342336ee16ac5c8dda3263370b334ac97c7d5a7d7a2ac258fc0a920389372b4",
                    "EndpointID": "bc760320a388d1a65d876b4461a02ca8f2eb42a900ef69a6328b5724f80bbcc4",
                    "Gateway": "172.27.0.1",
                    "IPAddress": "172.27.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:1b:00:02",
                    "DriverOpts": null
                }


# 查看端口映射信息
[root@docker ~]# docker port myweb01 
80/tcp -> 0.0.0.0:8080
[root@docker ~]# curl localhost:8080  -I
HTTP/1.1 200 OK
Server: nginx/1.17.3
Date: Sat, 28 Sep 2019 07:29:43 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 13 Aug 2019 08:50:00 GMT
Connection: keep-alive
ETag: "5d5279b8-264"
Accept-Ranges: bytes

# 查看路由转换信息
[root@docker ~]# iptables -t nat -L -n -v  | grep "172.27.0.*"
    0     0 MASQUERADE  all  --  *      !br-3342336ee16a  172.27.0.0/16        0.0.0.0/0           
    0     0 MASQUERADE  tcp  --  *      *       172.27.0.2           172.27.0.2           tcp dpt:80
    2   104 DNAT       tcp  --  !br-3342336ee16a *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 to:172.27.0.2:80

在这里插入图片描述

二、Host网络模式
  Host网络模式并没有为容器创建一个隔离的网络环境。而之所以称之为host模式,是因为该模式下的Docker容器会和本地宿主机共享一个同一个网络名称空间,故Docker Container可以和宿主机一样,使用宿主机的eth0等网卡设备,实现和外界的通信。换言之,Docker Container的IP地址即为宿主机的eth0网卡设备的IP地址;这种模式下的容器没有隔离的Network Namespace,容器的IP地址同宿主机的IP地址,需要注意的是容器中服务的端口号不能与宿主机上已经使用了的端口号相冲突;Host网络模式可以和其他模式相共存。
  在这里插入图片描述

# 创建myweb02容器,并指明它使用的网络模式为host
[root@docker ~]# docker run --name  myweb02   -d  --network  host    nginx:latest                
WARNING: Published ports are discarded when using host network mode
945a4959f74a0c14498cc7d901a1091460f108baa9329add3c15d082b29304b7
[root@docker ~]# docker inspect  myweb02 
"Networks": {
                "host": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "ff35fa4400e43347564b0eda09c9c13d35ac71d89888adb02b1d3a9caf170394",
                    "EndpointID": "",
                    "Gateway": "",
                    "IPAddress": "",
                    "IPPrefixLen": 0,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "",
                    "DriverOpts": null
                }
            }

三、Container模式
  Container网络模式是Docker中一种比较特殊的网络的模式,处于这个模式下的Docker容器会共享其他容器的网络环境,因此,至少这两个容器之间不存在网络隔离,而这两个容器又与宿主机以及除此之外其他的容器存在网络隔离。
也就是说,虽然我们启动的是不同的容器,但是他们彼此之间是可以使用localhost进行通讯的。  
在这里插入图片描述

# 创建myweb03容器,使其共享myuweb01容器的网络名称空间
[root@docker ~]# docker run --name    myweb03    -d   --network container:myweb01  nginx:latest 
9bd76830a1dc0e03a77b77a3ed7d37076e7286d0a1744afaa54a44d3c1303455
[root@docker ~]# docker  inspect   myweb03 
 "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {}
        }

四、None网络模式
  None网络模式即不为Docker容器构造任何的网络环境。一旦Docker容器采用了None网络模式,那么容器内部就只能使用loopback网络设备,不会再有其他的网络资源。Docker Container的None网络模式意味着不给该容器创建任何的网络环境,容器只能使用127.0.0.1的本机网络栈。

[root@docker ~]# docker run --name   myweb04   -d  --network  none     nginx:latest 
629c73b9a7cc795bd97bfccb22cb4f8f6fc1b96587046f7ce27a97496b026532
   "Networks": {
                "none": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "1af23f0e55b5ceabcaf4c1aaa405e964deaf27760ac38bc497e75456f997d570",
                    "EndpointID": "9daba49d1574300af3017817ff4f905f933c5a4465180dee673c719e563a229a",
                    "Gateway": "",
                    "IPAddress": "",
                    "IPPrefixLen": 0,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "",
                    "DriverOpts": null
                }

从按键开机到I2C隔离:手把手拆解一个智能硬件项目里的MOS管实战配置 本文详细解析了智能硬件项目中MOS管的实战配置,从按键开机电路到I2C总线隔离,全面覆盖电源管理和信号隔离的关键技术。通过PMOS+NMOS组合方案实现可靠的开机功能,并采用双NMOS方案优化I2C通信隔离,提升系统稳定性和信号质量。 阅读详情

相关推荐

20 CVPR Learning 3D Semantic Scene Graphs From 3D Indoor Reconstructions 学习笔记

3RScan是大规模真实世界的室内场景,特点是对478个自然改变的室内环境在不同的时间帧进行了1482 RGB-D scans,每一个scene都包括了一些位置被改变的物体。它和ScanNet数据集的区别主要在于ScanNet中的每一个采样环境都不相同,但是3RScan中存在采样环境相同但物体的位置不同的场景。Scene Graph Annotations 则是在3RScan的基础上给物体加入了场景图需要的关系、物体特征和类别标注,同时对3RScan进行了扩展,以此形成了场景图数据。

weixin_43508459的博客 1835

(超详细)三级信息通信网络运行管理员第七套linux实操题讲解(六)

如上图, 题目要求我们配置dhcp服务,ipv4的地址池范围为.....,并且更改虚拟机的网络适配器为桥接中环路适配器,有没有发现,我们做ensp的时候也有dhcp配置,目的是一样的,都是让目标机自动获取到ip地址。3.再更改虚拟机的网络适配器为桥接中的环路适配器,这个环路适配器需要我们自己先在真实机安装,在这里,真实机就是宿主机。4.之后再查看是否配置环路适配器是否获取到虚拟机的dhcp地址池中的地址。这期就到这里啦,非常抱歉,这么久才更新!接着上一期,我们将完了硬盘挂载,接下来我们继续往下讲吧!

2302_78083213的博客 1353

Unity UGUI高斯模糊背景效果 简易解决方案

UnityUI背景模糊效果简易解决方案1.功能描述简易界面框架搭建合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 1.功能描述 在我们玩游戏的时候,经常会看到一些游戏会对UI做这样的处理: 可以看到,新开的上层UI界面会以下层UI界面的模糊

SaberZG的博客 1万+

K8S故障处理指南:网络问题排查思路

K8S故障处理指南:网络问题排查思路

虫虫的博客 3610

KUKA 虚拟调试实战——打通Simpro4.1与OfficeLite8.6的通信与实时控制链路

本文详细介绍了KUKA虚拟调试实战,重点解析如何打通Simpro4.1与OfficeLite8.6的通信与实时控制链路。通过环境搭建、权限配置、机器人型号匹配等关键步骤,帮助工程师高效完成机器人轨迹规划和PLC联锁逻辑验证,大幅降低真机调试风险。文章还提供了典型报错解决方案和实时控制优化技巧,适用于工业机器人仿真与培训场景。

weixin_30907935的博客 449

ARM架构实战:在鲲鹏920服务器上用Debian12部署PVE虚拟化平台

本文详细介绍了在基于ARM架构的华为鲲鹏920服务器上,以Debian 12为底层系统,部署Proxmox VE(PVE)虚拟化平台的完整实战流程。文章重点解析了ARM64架构下PVE软件源的配置、内核安装的注意事项、部署后网络与存储的调优,并提供了针对ARM虚拟化环境的性能优化建议,为在国产化硬件上构建稳定高效的虚拟化环境提供了宝贵经验。

efc12345678的博客 780

Docker中网络的使用和配置用法详解

Docker中网络的使用和配置用法详解

IT之一小佬的博客 3672

Cadence元件库介绍

Cadence安装完之后,在安装目录下,会有默认自带的一些常用元件库。例如,我的Candece安装目录为: D:\Cadence\Cadence_SPB_17.2-2016 元件库所在目录为: D:\Cadence\Cadence_SPB_17.2-2016\tools\capture\library 各个元件库对应的内容如下: AMPLIFIER.OLB 共 182 个零件,存放模拟放大器 IC,如 CA3280,TL027C,EL4093 等。 ARITHMETIC.OLB 共 182 个零件,存放

年少时的棉花糖 1万+

【Docker基础】Docker网络模式:Bridge模式深度解析

建议遵循 "默认使用Bridge模式,复杂场景升级网络方案" 的原则,通过合理配置自定义网桥、端口映射和安全策略,Bridge模式能够满足绝大多数单体容器和同主机分布式应用的网络需求,成为容器化部署的 "万能基石"。在Docker的内置网络模式中,Bridge 模式(桥接模式) 是最常用、最基础的网络方案,承担了80%以上单体容器的网络通信需求。它通过虚拟网桥实现容器与主机、容器与容器之间的二层通信,并借助NAT技术完成与外部网络的连接。原生支持(VXLAN)单体容器、同主机微服务。

IT成长日记的博客 2493

<PLC><汇川>汇川PLC基于EtherCat协议使用转矩模式控制SV630N伺服驱动电机

本系列是关于PLC相关的博文,包括PLC编程、PLC与上位机通讯、PLC与下位驱动、仪器仪表等通讯、PLC指令解析等相关内容。PLC品牌包括但不限于西门子、三菱等国外品牌,汇川、信捷等国内品牌。除了PLC为主要内容外,PLC相关元器件如触摸屏(HMI)、交换机等工控产品,如果有值得记录的内容,也会添加进来。

用沸腾的热血,支付我们的人生吧! 4159

基于Simulink的基于MPC的实时ZMP约束步态优化仿真

本文完成了基于Simulink的MPC实时ZMP约束步态优化仿真,实现了:✅ 建立3D-LIPM预测模型✅ 设计带ZMP可行域约束的MPC优化器✅ 实现闭环实时求解与扰动抑制✅ 验证强鲁棒性与安全性✅ 为人形机器人野外行走、人机交互提供先进控制方案。

xiaoheshang_123的博客 86

WARNING: Published ports are discarded when using host network mode 解决方法

问题: docke启动时总是遇见标题中的警告,-p 8889:8888的设置也不起任何作用。 原因: docker启动时指定--network=host或-net=host,如果还指定了-p或-P,那这个时候就会有此警告,并且通过-p或-P设置的参数将不会起到任何作用,端口号会以主机端口号为主,重复时则递增。 解决: 解决的办法就是使用docker的其他网络模式...

Tilyp的博客 6万+

一个人干完整个运营团队!浙大开源「Easel」全链路拆解:从热点发现到自动发布,一个 Agent 直接做出来

一个人干完整个运营团队?浙大 REAL 实验室开源的 Easel,把 OpenClaw Agent、账号画像、114 个内容技能和真实媒体工具接在一起:从热点发现、选题策划、图文视频创作,到七平台适配发布、数据归因复盘,全链路一个 Agent 闭环完成,产物按项目归档。本文完整拆解其五层工作流、四层 Prompt Stack 架构、画像内联机制、Skill 三层加载与产物契约,附安装部署、.env 关键配置、Embedding 避坑、已知问题修复等实战干货,全程无虚构、可复现。

program哲学 293

docker 四种网络模式解析

实现原理 Docker使用Linux桥接(参考《Linux虚拟网络技术》),在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。 Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法通过直接Co

李虹柏的博客 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Docker 容器之网络模式

​    Docker 除了上述四种原生的网络模式外, Docker 还能够扩展支持自定义网络模式。自定义的网络模式是对 Docker 默认 Bridge 网络的增强,提供了更佳的功能性和灵活性。自定义的网络模式能够用户根据需求,创建的虚拟网络环境,用于更精细地控制容器间的通信方式和网络配置。注意别于默认的桥接模式,使用的网络驱动仍是桥接,底层依然利用 Linux Bridge 、Veth Pair 技术,但功能比默认 Docker0 强大得多。

Java_fenxiang的博客 782

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Docker网络模式解析

docker四种网络模式解析以及对应的小demo

m0_62946761的博客 1万+

Docker网络模式

docker 使用linux 桥接,在宿主机虚拟一个docker 容器网桥(docker0) ,docker 启动一个容器时会根据docker 网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker 网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的 Container-IP 直接通信docker 网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法直接通过Container-IP 访问到容器

weixin_45305723的博客 1520

docker网络模式

直接使用bridge模式,是无法支持指定IP运行docker的#docker1 为执行 ifconfig -a 命令时,显示的网卡名,如果不使用 --opt 参数指定此名称,那你在使用 ifconfig -a 命令查看网络信息时,看到的是类似 br-110eb56a0b22 这样的名字,这显然不怎么好记。#mynetwork 为执行 docker network list 命令时,显示的bridge网络模式名称。1、#此处需run一个容器test4,指定网络IP运行容器test4。

wys_jj的博客 1028

docker的网络模式

Bridge 模式:默认模式,适用于大多数单机场景,支持端口映射和自定义网络。Host 模式:容器共享宿主机网络栈,性能高,但安全性较低。None 模式:容器没有网络配置,适用于完全隔离或自定义网络需求的场景。Container 模式:多个容器共享网络栈,适用于紧密协作的容器。Macvlan 模式:容器直接连接到物理网络,拥有自己的 MAC 和 IP。Overlay 模式:用于跨主机的分布式网络,适用于集群环境。自定义 Bridge 模式:创建用户定义的网络,提供更好的网络隔离和容器间通信。

qq_41917355的博客 1858

docker 网络模式

⾃定义容器⽹络可使不同的集群使⽤不同的⽹络,避免相互影响。查看所有docker⽹络:docker network ls⾃定义docker⽹络:docker network create --driver bridge --subnet 192.168.1.0/24 --gateway 192.168.1.254 mynetcreate #创建⽹络--driver #定义⽹络模式--subnet #定义⽹络IP--gateway #指定⽹关mynet #是⾃⼰定义的⽹络名称。

WWNY666的博客 2182
上一篇: Gitlab介绍与使用
下一篇: CI/CD与Jenkins安装
Micky_Yang
博客等级 码龄8年 58粉丝 143原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值