Docker 网络模式:bridge、host、none 到底怎么选
Docker 网络模式:bridge、host、none 到底怎么选
用 Docker 跑服务时,容器能不能被访问、能不能连外网、端口会不会冲突,基本都由网络模式决定。Docker 自带三种模式:bridge、host、none。理解它们的区别,选型就不会靠猜。
bridge:默认模式,也是最常用的
docker run 不指定 --network 时,容器用的就是 bridge 模式。每个容器会拿到一个独立 IP(一般是 172.17.x.x),容器之间通过这个内网 IP 互通,宿主机之外想访问容器里的服务,要用 -p 做端口映射,比如 -p 8080:80。
优点很明显:隔离性好,多个容器可以在宿主机上用同一个端口(容器内都是 80,映射到宿主机不同端口即可);容器 IP 固定在内网段,不直接暴露。
缺点也有:多一层 NAT 转发,性能有轻微损耗;容器之间想用名字互相访问,需要自己建一个自定义 bridge 网络(默认 bridge 不支持容器名解析)。
适合:绝大多数 Web 服务、数据库、中间件。开发和生产都优先考虑它。
host:容器直接用宿主机的网络
--network host 之后,容器不再有独立 IP,它和宿主机共享同一套网络栈。容器里起一个 80 端口的服务,宿主机 80 端口就直接能访问,不需要 -p 映射。
优点是性能最好,没有 NAT 开销,延迟最低;缺点是隔离性最差——容器端口就是宿主机端口,两个容器不能同时占同一个端口,端口冲突要自己协调。
适合:对网络性能敏感的场景,比如高并发代理、游戏服务器;或者容器需要监听大量随机端口,用映射写不过来的时候。
none:完全不联网
--network none 的容器只有一个 loopback 接口,没有任何网络。既不能访问外网,也不能被访问。
听起来没用,但它有两个正经用途:一是跑完全离线的批处理任务(比如本地文件格式转换),断网本身就是一道安全防线;二是用作自定义网络方案的起点,后面再手动把网卡接进来。
适合:纯离线计算、需要严格网络隔离的安全敏感任务。
怎么选?一张小抄
- 不确定选什么 → bridge,默认项一般不会错。
- 追求极致网络性能、能接受端口冲突管理 → host。
- 不需要任何网络 → none。
- 多个容器要互相用名字访问 → 建自定义 bridge 网络(
docker network create mynet),比默认 bridge 好用。
最后提醒一点:bridge 模式下容器重启后 IP 可能变化,服务之间互相调用不要写死容器 IP,用容器名或自定义网络的内置 DNS 解析才是正路。
- 点赞
- 收藏
- 关注作者
评论(0)