Docker网络模式详解,bridge、host、none

前言

Docker容器怎么联网的?bridge、host、none这些网络模式啥区别?本文一次讲清楚。

一、Docker网络模式

Docker有5种网络模式:

  1. bridge:默认模式,桥接网络
  2. host:主机网络,和宿主机共用
  3. none:无网络
  4. container:和另一个容器共用网络
  5. 自定义网络:自己建的网络

二、bridge模式(默认)

是什么

Docker默认的网络模式。每个容器有自己的虚拟网络,通过docker0网桥和宿主机通信。

特点

  • 每个容器有自己的IP
  • 容器之间可以通过容器名互相访问
  • 外部要访问容器,要靠 -p 端口映射

用法

docker run -d --name nginx -p 80:80 nginx

没指定 --network,默认就是bridge。

容器之间通信

docker run -d --name mysql mysql:5.7
docker run -d --name web --link mysql nginx

或者用自定义网络,容器名直接解析:

docker network create mynet
docker run -d --name mysql --network mynet mysql:5.7
docker run -d --name web --network mynet nginx

web容器里直接用 mysql 这个主机名就能连数据库。

三、host模式

是什么

容器直接用宿主机的网络,没有自己的虚拟网卡。

特点

  • 没有独立IP,和宿主机共用
  • 不用 -p 映射,直接用宿主机的端口
  • 性能最好,因为少了一层网络转发
  • 安全性差点,容器直接暴露在宿主机网络上

用法

docker run -d --name nginx --network host nginx

注意

host模式下,-p 参数无效。容器用什么端口,直接就是宿主机的端口。

比如Nginx监听80,宿主机的80就被占了。

四、none模式

是什么

容器没有网络,完全断网。

特点

  • 没有网卡,没有IP
  • 只能通过localhost访问
  • 适合不需要联网的任务,比如批量处理文件

用法

docker run -d --name test --network none nginx

查看

docker exec test ip addr

只能看到lo回环网卡。

五、container模式

是什么

新创建的容器和一个已有的容器共用网络。

特点

  • 两个容器共用同一个网络命名空间
  • 用 127.0.0.1 就能互相访问
  • 适合一个应用拆成多个容器的场景

用法

# 先跑一个web容器
docker run -d --name web nginx

# 再跑一个sidecar容器,和web共用网络
docker run -d --name sidecar --network container:web busybox

sidecar容器里 127.0.0.1 就是web容器的localhost。

六、自定义网络

创建网络

docker network create mynet

使用网络

docker run -d --name mysql --network mynet mysql:5.7
docker run -d --name redis --network mynet redis

好处

  • 容器名自动解析,不用写IP
  • 网络隔离,不同网络的容器不能互相访问
  • 更灵活

查看网络

docker network ls

查看网络详情

docker network inspect mynet

七、常用命令

查看容器网络模式

docker inspect -f '{{.HostConfig.NetworkMode}}' 容器名

查看容器IP

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名

查看所有网络

docker network ls

删除网络

docker network rm mynet

八、常见场景选什么模式

场景1:跑Web服务,要外网访问

选bridge,用 -p 映射端口。

场景2:追求高性能,比如数据库

选host,少一层转发,性能好。

场景3:不需要联网的任务

选none,安全。

场景4:两个容器紧耦合

选container,共用网络。

场景5:多容器编排

选自定义网络,容器名自动解析。

九、常见坑

坑1:容器之间ping不通

bridge模式下,容器之间默认是通的,但如果用了none就不通。

检查: 网络模式是什么?

docker inspect 容器名 | grep NetworkMode

坑2:host模式下端口冲突

host模式直接用宿主机端口,端口被占了就起不来。

检查: 宿主机端口有没有被占。

坑3:容器名解析不了

默认bridge网络不支持容器名解析。

解决: 用自定义网络。

坑4:改了网络模式,要重新建容器

网络模式是容器创建时定的,不能改。

解决: 删掉容器重新跑。

总结

记住:

  1. bridge:默认,端口映射,常用
  2. host:共用宿主机网络,性能好
  3. none:断网,安全
  4. container:和别的容器共用网络
  5. 自定义网络:容器名自动解析,推荐

最常用:

docker network create mynet
docker run -d --name nginx --network mynet nginx

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-8 08:27