七、Docker核心技术:深入理解网络模式 (Bridge, Host, None, Container)

七、Docker核心技术:深入理解网络模式 (Bridge, Host, None, Container)

容器不仅仅是孤立的运行环境,它们需要相互通信,也需要与外部世界进行交互。Docker 通过强大而灵活的网络子系统来实现这一点。理解 Docker 的不同网络模式,是构建和部署复杂多容器应用的关键。本节将深入探讨 Docker 原生提供的四种网络模式以及强烈推荐使用的自定义网络

思维导图

在这里插入图片描述


在这里插入图片描述

一、Bridge 模式 - 默认的网络

bridge 模式是 Docker默认使用的网络模式。当你运行一个容器而不指定--network 参数时,它就工作在这个模式下。

工作原理:
Docker 在宿主机上默认创建一个名为 docker0 的虚拟网桥,用来让主机和容器在同一子网内通过 IP 直接通信。每个容器都会被分配一个独立的网络命名空间和一个连接到 docker0 的私有IP地址。

Bridge 模式特性

特性说明
网络隔离默认提供良好的网络隔离,每个容器有自己的网络栈。
容器间通信连接到同一网桥的容器,可以通过彼此的私有IP地址通信。
外部访问必须使用-p-P 进行端口映射,才能从外部访问容器服务。
在这里插入图片描述


在这里插入图片描述

代码示例:

# 1. 启动三个 Nginx 容器,分别映射到宿主机的不同端口 docker run -d --name nginx1 -p 8081:80 nginx docker run -d --name nginx2 -p 8082:80 nginx docker run -d --name nginx3 -p 8083:80 nginx # 2. 查看容器的私有 IP docker inspect nginx1 |grep"IPAddress" docker inspect nginx2 |grep"IPAddress" docker inspect nginx3 |grep"IPAddress"# 3. 在宿主机上查看 docker0 网桥和 veth 接口ip addr show docker0 iplink show |grep veth # 4. 查看 veth 和 docker0 的桥接关系 brctl show docker0 # 5. 测试同一子网直连通信# 从宿主机 ping 容器ping -c 2172.17.0.2 # 假设 nginx1ping -c 2172.17.0.3 # 假设 nginx2# 容器之间互 ping docker exec -it nginx2 ping -c 2172.17.0.2 docker exec -it nginx3 ping -c 2172.17.0.3 # 6. 测试端口映射访问curl http://localhost:8081 curl http://localhost:8082 curl http://localhost:8083 
在这里插入图片描述

二、Host 模式 - 共享宿主机网络

host 模式下,容器不再拥有自己独立的网络命名空间,而是直接共享宿主机的网络栈。

Host 模式特性总结

特性说明
网络共享容器直接使用宿主机的IP地址和网络配置。
性能网络性能最高,因为没有NAT转换的开销。
端口无需端口映射 (-p 无效)。容器监听的端口直接暴露在宿主机上。
缺点牺牲了网络隔离性,容易发生端口冲突
在这里插入图片描述

代码示例:

# 使用 host 模式启动一个 Nginx 容器 docker run -d --name nginx-host --network host nginx # 在宿主机上直接访问 localhost:80curl http://localhost 
在这里插入图片描述

三、None 模式 - 完全隔离

none 模式为容器创建一个独立的网络命名空间,但不为其进行任何网络配置。

None 模式特性总结

特性说明
网络配置容器内仅有一个 lo (loopback) 回环网卡。
隔离性完全的网络隔离,无法与外部、宿主机或其他容器通信。
适用场景完全不需要网络连接的任务,如批量计算高安全需求的任务。
在这里插入图片描述

代码示例:

# 使用 none 模式启动一个 tomcat 容器 docker run -d -p 8085:8080 --name my_tomcat02 --network none tomcat # 在宿主机查看容器网络配置 docker inspect my_tomcat02 |tail -20 
在这里插入图片描述

四、Container 模式 - 共享网络

container 模式允许一个新创建的容器共享另一个已存在容器的网络命名空间。

Container 模式特性总结

特性说明
网络共享新容器与目标容器共享同一个IP、端口、路由等。
通信两个容器之间可以通过 localhost直接通信
适用场景“边车 (Sidecar)”模式,如主应用网络监控日志收集容器的组合。
在这里插入图片描述

代码示例:

# 1. 先启动一个主容器 (目标容器) docker run -d --name main-app nginx # 2. 启动一个边车容器,共享 main-app 的网络 docker run -it --name sidecar --network container:main-app busybox # 3. 在 sidecar 容器的 shell 内部,通过 localhost 访问 main-app 的 Nginx 服务wget -qO- http://localhost 
在这里插入图片描述


在这里插入图片描述

五、自定义网络 - 最佳实践

在生产环境或多容器应用中,强烈推荐创建和使用自定义的 bridge 网络。

自定义网络核心优势

优势说明
自动DNS解析最大的优点。容器间可以通过容器名称直接通信,无需关心IP地址。
更佳网络隔离不同自定义网络之间默认是隔离的,提供了更安全的环境。
在这里插入图片描述

常用网络管理命令

命令作用
docker network create <name>创建一个自定义网络。
docker network ls列出所有网络。
docker network inspect <name>查看网络详情,包括连接的容器。
docker network connect <net> <cont>已运行的容器连接到网络。
docker network disconnect <net> <cont>断开容器与网络的连接。
docker network rm <name>删除一个自定义网络。

代码示例 (容器名通信):

# 1. 创建自定义网络 docker network create my-app-network # 2. 再创建一个测试网络 docker network create test# 3. 查看当前所有网络 docker network ls# 4. 查看 bridge 网络详情 docker network inspect bridge # 5. 将容器 my-nginx 连接到 test 网络 docker network connect test my-nginx # 6. 查看 my-nginx 的网络配置(此时有 bridge 和 test 两个网络) docker inspect my-nginx # 7. 将 my-nginx 从 test 网络移除 docker network disconnect test my-nginx # 8. 再次查看 my-nginx 的网络配置(只剩下 bridge) docker inspect my-nginx 
在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

练习题

题目一:默认网络模式
当你执行 docker run nginx 时,该容器默认会连接到哪个网络?

题目二:Bridge 模式通信
你有两个以默认 bridge 模式运行的容器 container-acontainer-b。如何在 container-a 中访问 container-b

题目三:Host 模式特性
使用 host 网络模式启动一个容器后,如何查看该容器的IP地址?

题目四:Host 模式端口
如果一个容器以 host 模式运行,并且其内部的应用监听 8080 端口,你需要使用 docker run 的哪个参数来暴露这个端口给宿主机?

题目五:None 模式应用
描述一个适合使用 none 网络模式的具体场景。

题目六:Container 模式核心
container 模式下,两个容器共享了什么?它们之间最简单的通信方式是什么?

题目七:自定义网络优势
相比默认的 bridge 网络,创建自定义 bridge 网络的两个主要优势是什么?

题目八:自定义网络创建
写出一条命令,创建一个名为 backend-net 的自定义 bridge 网络。

题目九:连接到自定义网络
如何启动一个新的 redis 容器,命名为 cache,并将其直接连接到 backend-net 网络?

题目十:容器名解析
假设 cache 容器和一个名为 api-server 的应用容器都连接到了 backend-net。在 api-server 容器内部,应该使用哪个主机名来连接 cache 容器?

题目十一:动态连接网络
一个名为 legacy-app 的容器已经在默认的 bridge 网络中运行。如何将其也连接到 backend-net 网络,使其可以与 cacheapi-server 通信?

题目十二:网络隔离
你有两个自定义网络 frontend-netbackend-net。一个名为 webapp 的容器只连接到 frontend-net,一个名为 database 的容器只连接到 backend-netwebapp 容器是否能直接通过容器名访问 database 容器?

题目十三:查看网络中的容器
如何查看 backend-net 网络中当前连接了哪些容器?

题目十四:网络模式选择
你需要部署一个对网络延迟极其敏感、性能要求极高的应用,并且可以接受较低的安全隔离性。你应该优先考虑哪种网络模式?

题目十五:断开网络连接
写出一条命令,将 legacy-app 容器从 backend-net 网络中断开连接。

答案与解析

答案一:
默认的 bridge 网络

答案二:
首先使用 docker inspect container-b 查找其私有IP地址,然后在 container-a 内部使用该IP地址进行访问 (例如 ping <ip_address_of_b>)。

解析: 默认 bridge 网络不支持容器名DNS解析,只能通过IP地址通信

答案三:

容器没有自己的独立IP地址,它共享宿主机的IP。你可以通过在宿主机上执行 ip aifconfig 来查看。

答案四:

不需要任何参数。

答案五:

一个执行密码破解或科学计算的容器。这类任务只需要CPU和内存资源,完全不需要网络连接,使用 none 模式可以最大化安全隔离。

答案六:

它们共享同一个网络命名空间(IP地址、端口、路由表等)。最简单的通信方式是通过 localhost

答案七:

1.自动DNS解析:可以通过容器名直接通信。2. 更好的网络隔离:不同自定义网络之间默认是隔离的。

答案八:

docker network create backend-net 

答案九:

docker run -d --name cache --network backend-net redis 

答案十:

应该使用主机名 cache

答案十一:

docker network connect backend-net legacy-app 
解析:docker network connect 允许将一个正在运行的容器连接到一个或多个网络。

答案十二:
不可以。

解析: 容器默认只能与连接在相同网络中的其他容器通信。要让它们通信,需要将其中一个容器也连接到另一个网络上。

答案十三:

docker network inspect backend-net 

答案十四:
应优先考虑 host 模式。

解析:host 模式消除了网络地址转换 (NAT) 的开销,提供了最佳的网络性能,代价是牺牲了隔离性。

答案十五:

docker network disconnect backend-net legacy-app 

日期:2025年10月9日
专栏:Docker教程

Read more

超详细图文教程:用vscode+copilot(代理模式)便捷使用mcp+一个范例:用自然语言进行3d建模

超详细图文教程:用vscode+copilot(代理模式)便捷使用mcp+一个范例:用自然语言进行3d建模

在vscode使用claude mcp吧! 在vscode更新到最新版本(注意,这是前提)后,内置的copilot可以使用mcp了!!! 关于mcp(Model Context Protocol 模型上下文协议),可以参考我的上一篇文章: MCP个人理解+示例+集成管理+在python中调用示例,给AI大模型装上双手-ZEEKLOG博客 以下是使用教程: 1.点击左下角的齿轮状设置按钮,点击设置 2.在输入面板输入chat.agent.enabled,勾上勾选框 3.点击Ctrl+shift+P,输入reload,点击重新加载窗口,刷新窗口 4.打开copilot后,在右下角将模式改为代理即可。 5.点击工具按钮,开始安装mcp 先去github找到自己想要添加的mcp服务,以blender MCP为例,打开https://github.com/ahujasid/blender-mcp,可以在readme文档里看到详细的安装过程。可以看到,

By Ne0inhk
【MCP】详细了解MCP协议:和function call的区别何在?如何使用MCP?

【MCP】详细了解MCP协议:和function call的区别何在?如何使用MCP?

本文介绍了MCP大模型上下文协议的的概念,并对比了MCP协议和function call的区别,同时用python sdk为例介绍了mcp的使用方式。 1. 什么是MCP? 官网:https://modelcontextprotocol.io/introduction 2025年,Anthropic提出了MCP协议。MCP全称为Model Context Protocol,翻译过来是大模型上下文协议。这个协议的主要为AI大模型和外部工具(比如让AI去查询信息,或者让AI操作本地文件)之间的交互提供了一个统一的处理协议。我们常用的USB TypeC接口(USB-C)统一了USB接口的样式,MCP协议就好比AI大模型中的USB-C,统一了大模型与工具的对接方式。 MCP协议采用了C/S架构,也就是服务端、客户端架构,能支持在客户端设备上调用远程Server提供的服务,同时也支持stdio流式传输模式,也就是在客户端本地启动mcp服务端。只需要在配置文件中新增MCP服务端,就能用上这个MCP服务器提供的各种工具,大大提高了大模型使用外部工具的便捷性。 MCP是开源协议,能让所有A

By Ne0inhk
【大模型系列篇】大模型基建工程:基于 FastAPI 自动构建 SSE MCP 服务器

【大模型系列篇】大模型基建工程:基于 FastAPI 自动构建 SSE MCP 服务器

今天我们将使用FastAPI来构建 MCP 服务器,Anthropic 推出的这个MCP 协议,目的是让 AI 代理和你的应用程序之间的对话变得更顺畅、更清晰。FastAPI 基于 Starlette 和 Uvicorn,采用异步编程模型,可轻松处理高并发请求,尤其适合 MCP 场景下大模型与外部系统的实时交互需求,其性能接近 Node.js 和 Go,在数据库查询、文件操作等 I/O 密集型任务中表现卓越。 开始今天的正题前,我们来回顾下相关的知识内容: 《高性能Python Web服务部署架构解析》、《使用Python开发MCP Server及Inspector工具调试》、《构建智能体MCP客户端:完成大模型与MCP服务端能力集成与最小闭环验证》   FastAPI基础知识 安装依赖 pip install uvicorn, fastapi FastAPI服务代码示例  from fastapi import FastAPI app

By Ne0inhk
02-mcp-server案例分享-Excel 表格秒变可视化图表 HTML 报告,就这么简单

02-mcp-server案例分享-Excel 表格秒变可视化图表 HTML 报告,就这么简单

1.前言 MCP Server(模型上下文协议服务器)是一种基于模型上下文协议(Model Context Protocol,简称MCP)构建的轻量级服务程序,旨在实现大型语言模型(LLM)与外部资源之间的高效、安全连接。MCP协议由Anthropic公司于2024年11月开源,其核心目标是解决AI应用中数据分散、接口不统一等问题,为开发者提供标准化的接口,使AI模型能够灵活访问本地资源和远程服务,从而提升AI助手的响应质量和工作效率。 MCP Server 的架构与工作原理 MCP Server 采用客户端-服务器(Client-Server)架构,其中客户端(MCP Client)负责与服务器建立连接,发起请求,而服务器端则处理请求并返回响应。这种架构确保了数据交互的高效性与安全性。例如,客户端可以向服务器发送请求,如“查询数据库中的某个记录”或“调用某个API”,而服务器则根据请求类型,调用相应的资源或工具,完成任务并返回结果。 MCP Server 支持动态发现和实时更新机制。例如,当新的资源或工具被添加到服务器时,

By Ne0inhk