第 6 部 网络:容器如何互相找到对方


第 6 部 网络:容器如何互相找到对方

章节摘要:容器默认能上网却彼此陌生,要让服务之间互通,得请出网络命令族。本部把网络词条编成两部分:网络模式速览回答"容器以什么身份上网"(bridge、host、none、macvlan 各自的隔离面与适用场景);自定义网络现场回答"怎么让容器按名字互相访问"(network create、connect、inspect 与内置 DNS)。学完本部,容器互联不再靠暴露端口硬凑,而是按名字组网。

学习目标

阅读完本部,你应当能够:

  1. 说出 bridge、host、none 三种基础网络模式的隔离程度与典型用途。
  2. 解释为什么默认 bridge 网络里容器间没有名字解析,而自定义网络里有。
  3. 用 docker network create 建自定义网络,用 connect 把运行中容器接入。
  4. 用容器名作为主机名完成服务间互访(如应用连数据库)。
  5. 用 docker network inspect 查看网络内成员与地址分配。
  6. 用 docker network disconnect 与 prune 收拾网络关系与闲置网络。
  7. 判断 --link 为何被淘汰,并能用自定义网络改写旧命令。

核心概念速览

金句:默认网络里容器是门牌号邻居,自定义网络里才是叫得出名字的同事。

子章节导航

6.1 网络模式词条速览:docker network ls 起步,逐个看 bridge、host、none、macvlan 的接入方式与隔离代价。重点是"默认 bridge 与自定义 bridge 行为不同"这一最易踩的认知差。

6.2 自定义网络与容器互联现场:从 create 到按名字互访的完整会话。应用容器连数据库容器只写一个服务名即可,名字解析、成员查看、退出网络、清理闲置网络一并给全。

子章节之间的逻辑关系

6.1 是认知底座(容器在世界里的身份),6.2 是操作主场(让容器互相认识):

+---------------------+ +----------------------+ | 6.1 网络模式速览 | --> | 6.2 自定义网络现场 | | bridge/host/none | | create/connect | | 隔离面与代价 | | 内置 DNS 按名互访 | +---------------------+ +----------------------+ | | +--- 叁部 -p 端口映射是 bridge 出网的手段 ----+ ​

高频疑问

问:容器连不上外网,先查什么? 先看 network inspect 里容器在不在网内、领到的地址与网段对不对,再看宿主机自身的出口与 DNS(容器的 DNS 继承宿主机配置)。多数"容器断网"案例最后查出来是宿主机代理或防火墙,不是 Docker 的锅。

问:-p 写了端口还是访问不了? 依次核对三处:宿主机防火墙放行了吗;-p 绑的是 0.0.0.0 还是 127.0.0.1(后者只有本机能访问);服务在容器里监听的是 0.0.0.0 还是 localhost(监听 localhost 的服务映射了也进不去)。三处都对过,再考虑 host 模式误配 -p 的可能。

问:一个容器能同时在多个网络里吗? 能。connect 可以把容器接进多张网,它在每张网里各有一个地址——这正是"前端网络与后端网络分离"做安全分层的基础,6.2 现场会跑一遍。

问:自建网络多了会不会乱? 会。network ls 里自己建的网络用完即删(prune 词条在 6.2 收尾);命名带项目前缀是好习惯——Compose 自动建的网络都以项目名为前缀,用的正是这个思路。

前置知识与后续延伸

前置:叁部 3.2 的端口组选项(-p 与 --network 的首秀在那里),本部解释其背后的网络语义。延伸:柒部 Compose 会为项目自动创建自定义网络——学完本部再看 Compose 起的服务互相按名字调用,原理一目了然;捌部排错里"连不上数据库"案例的第一取证命令正是本部的 inspect。过关自测:给你应用与数据库两个容器,你能在不暴露任何数据库端口的前提下让应用连上它,并说出这期间谁负责名字解析。

作者与出处
原作者:灏天文库
来源:平台策划编纂
整理人: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U