docker network ls 是什么
它列出当前 Docker 的网络,默认有 bridge、host、none 三个。自定义网络的意义在于内置 DNS:同一自定义网络里的容器可以用容器名互相解析,这正是多容器应用能按名字互访的前提。
基本信息
| 默认网络 | bridge、host、none 三个 |
|---|---|
| bridge | 默认模式,容器有独立 IP,通过端口映射对外 |
| host | 共享宿主网络栈,无 NAT,性能高但冲突风险大 |
| none | 无网络,只有回环,用于隔离任务 |
| 自定义网络 | 支持按容器名解析,推荐多容器协作使用 |
| 输出格式 | 可用 --format 自定义显示列 |
网络模式对比
| 模式 | 隔离性 | 典型用途 |
|---|---|---|
| bridge | 有独立网络命名空间 | 默认,多数场景 |
| 自定义 bridge | 隔离且带内置 DNS | 多容器应用互访 |
| host | 无隔离,共享宿主网络栈 | 追求极致性能的网关 |
| none | 完全无网络 | 纯计算或离线任务 |
查看与使用
查看与使用
docker network ls # 列出所有网络
docker network ls --format "table {{.Name}} {{.Driver}}" # 自定义输出
docker network create app-net # 建自定义网络
docker run -d --network app-net --name db mysql:8.0 # 加入该网络
docker network inspect app-net # 看成员容器典型使用场景
- 多容器应用需要按名字互访,建自定义网络
- 排查容器访问不通,先确认两者是否在同一网络
- 需要更高网络性能时评估 host 模式
- 隔离离线任务时使用 none 模式
默认 bridge 网络下容器不能靠名字解析,用自定义网络是更干净的方案,也不必依赖已过时的链接参数。
host 模式没有网络隔离:容器直接使用宿主端口,同一端口只能有一个进程占用,冲突会直接导致启动失败。
把服务全部塞进 host 模式追求性能,会牺牲端口隔离与可移植性,后续多实例部署时会非常被动。
创建容器时不指定网络就会落到默认网络:多容器应用要么在运行时统一指定同一自定义网络,要么在编排文件里显式声明,避免个别容器落单。
容器所属网络在创建时就确定并写入容器:要换网络得重新创建容器,运行时无法直接切换,所以排查前先确认容器当前挂在哪个网络上。