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

docker学习 (3)网络与防火墙

🧱 1. Docker 默认会创建哪些网络?

当你安装 Docker 后,Docker 守护进程(dockerd自动创建了几个默认网络
你可以用命令查看:

docker network ls

输出一般类似这样:

NETWORK ID     NAME      DRIVER    SCOPE
9a8d7f2a2a00   bridge    bridge    local
cc3c8e21ab21   host      host      local
f3ac42e1d7c3   none      null      local

🌉 (1) bridge 网络(默认)

  • 当你运行容器时(如果不指定网络),Docker 默认会把容器放到 bridge 网络中。
  • 这是一个 由 Docker 自建的虚拟网桥(docker0)
  • 每个容器在这个网桥上都会被分配一个 私有 IP(172.17.0.x)
  • 容器之间可以互相通信(因为都在同一个二层网络里)。

🌐 (2) host 网络

  • 容器直接使用宿主机的网络栈。
  • 容器内没有自己的独立 IP,直接使用宿主机的 IP 和端口
  • 优点:性能高(少一层 NAT),但缺点是:端口容易冲突、隔离性差。

🚫 (3) none 网络

  • 容器完全没有网络接口。
  • 除了 loopback(127.0.0.1)外,无法通信。
  • 常用于安全隔离或自定义网络方案。

🔗 2. bridge 模式下容器之间的通信原理

bridge 模式下(默认),Docker 会自动创建一个虚拟网桥:

宿主机├─ docker0 (虚拟网桥, 类似交换机)│    ├─ 容器1 eth0 → 172.17.0.2│    └─ 容器2 eth0 → 172.17.0.3
  • 每个容器的网络接口(eth0)都连接到 docker0

  • Docker 会给每个容器分配 IP,并写好路由表。

  • 这样容器之间通过 IP(172.17.0.x)就能直接通信。
    例如:

    ping 172.17.0.3
    

🌍 容器访问外网的原理

  • 容器发出的流量,会经过 docker0,然后由 Docker 的 NAT(源地址转换) 转换成宿主机的 IP 发出去。
  • 外部网站看到的就是宿主机的 IP,而不是容器的。
  • 返回数据再通过 NAT 映射回来。

所以容器访问外网的原理就是:

「容器 → docker0 → NAT → 宿主机网络 → 外网」


🔥 3. 宿主机防火墙在 Docker 网络中的角色

✅ Docker 与 iptables

Docker 启动时,会在宿主机的 iptables 中自动添加一些规则,用于:

  • 容器间通信
  • 容器访问外网(NAT)
  • 端口映射(-p 参数)

如果你手动改动防火墙(或启用 firewalld 严格策略),可能导致:

  • 容器无法上网;
  • 容器端口无法访问;
  • 容器间通信被阻断。

🧭 排查思路

  1. 检查 Docker 的 iptables 是否被禁用:

    ps -ef | grep dockerd
    

    如果有 --iptables=false,说明 Docker 不再自动管理防火墙。

  2. 查看 Docker 的 NAT 规则是否还在:

    sudo iptables -t nat -L -n
    

    应该能看到类似:

    Chain DOCKER (2 references)
    target     prot opt source               destination
    DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0     tcp dpt:8080 to:172.17.0.2:80
    
  3. 若被 firewalld 阻断,可尝试允许 docker0:

    sudo firewall-cmd --zone=trusted --add-interface=docker0 --permanent
    sudo firewall-cmd --reload
    

🚪 4. 端口映射解释:-p 8080:80

命令:

docker run -p 8080:80 myapp

含义是:

把宿主机的 8080 端口 映射到容器的 80 端口

数据流向:

浏览器访问 http://宿主机IP:8080
↓
宿主机防火墙检查通过
↓
iptables (DNAT 映射规则)
↓
容器内的 80 端口
↓
myapp 接收请求并返回响应

举例:

如果宿主机 IP 是 192.168.1.10,那访问:

http://192.168.1.10:8080

就等同于访问容器的:

http://172.17.0.2:80

http://www.dtcms.com/a/491587.html

相关文章:

  • 智元发布新一代工业级交互式具身作业机器人精灵G2,多场景“六边形战士” 首发前已获数亿元订单
  • 如何在线烧录梦丘MOS表情机器人固件
  • 河北省建设网站锁安装什么驱动网站制作效果好
  • 链式法则在神经网络中的应用:原理与实现详解
  • 前段模板网站南京网站开发南京乐识正规
  • K8s 核心架构是什么?组件怎么协同工作的?
  • C语言---函数
  • 做网站的费用入什么科目哈尔滨网站建设外包公司
  • YOLOv4深入解析:从原理到实践的全方位指南
  • MATLAB机器学习入门教程
  • 网站建设的好处论文网络营销以什么为中心
  • android studio设置大内存,提升编译速度
  • 从原理到实战:数据库索引、切片与四表联查全解析
  • 重庆建站免费模板mui做wap网站
  • 思想实验:如何使用MeshGPT?
  • Vue3 + TypeScript 实现 CAN 报文实时回放与合并显示
  • seo网站推广有哪些网站维护与优化教程
  • LeetCode 2598. 执行操作后的最大 MEX
  • 机器学习,深度学习,神经网络,Transformer的关系
  • 赣州市赣县区建设局网站wordpress 主题导出
  • 广州知名网站建设性价比高百度企业官网认证
  • Vue 前端面试题(含答案)大全 v2025
  • 智能化与绿色化:2025年巧克力加工设备市场发展趋势报告
  • 经营网站备案信息自己做网站 怎么赚钱
  • CLIP介绍
  • 网站文件夹结构wordpress 入侵
  • neo4j安装
  • C语言基础数组作业(冒泡算法)
  • 【芯片验证日志的艺术:如何让打印信息成为Debug的利器?】
  • 基于MCU中RTT Viwer打印,从移植到测试所遇到的问题全部解决