Docker 网络——AI教你学Docker
1.5 Docker 网络详解
Docker 网络是容器化部署中的重要组成部分,决定了容器与容器、容器与主机、容器与外部世界的通信方式。理解 Docker 网络模型,有助于灵活、安全地设计和管理应用架构。
一、Docker 网络的基本概念
- 网络命名空间:每个容器拥有独立的网络命名空间,实现网络隔离。
- 虚拟网卡(veth pair):容器与主机之间通过虚拟网卡对连接,主机一端连到桥接网络,容器一端作为 eth0。
- 网络驱动(Network Driver):Docker 支持多种网络驱动,不同驱动决定容器网络的实现方式和能力。
二、Docker 支持的网络类型(驱动)
1. bridge(桥接网络,默认)
- 说明:适用于单主机容器互联。
- 特点:
- 容器自动分配私有 IP,通过网桥(默认
docker0
)与主机通信。 - 容器间可直接通信,外部访问需端口映射。
- 可自定义 bridge 网络,支持自动 DNS 服务发现。
- 容器自动分配私有 IP,通过网桥(默认
- 使用场景:开发测试环境、单机多服务部署。
2. host(主机网络)
- 说明:容器直接复用宿主机的网络栈。
- 特点:
- 容器没有独立的网络命名空间。
- 容器内端口与主机共享,端口冲突风险高。
- 性能高,无 NAT 转发,网络延迟低。
- 使用场景:性能敏感、需广播/组播、简单容器化脚本。
3. none(无网络)
- 说明:容器启动时不配置任何网络,仅有 lo 回环接口,完全隔离。
- 使用场景:纯计算、全隔离、无需通信场合。
4. overlay(覆盖网络)
- 说明:实现多主机间容器互联,需 Docker Swarm/Kubernetes 集群支持。
- 特点:
- 通过 VXLAN 技术,容器可跨物理主机通信。
- 内置加密、服务发现。
- 使用场景:分布式部署、微服务集群、云原生应用。
5. macvlan
- 说明:将物理网卡的一个 MAC 地址分配给容器,使其获得和主机同一网段的独立 IP。
- 特点:
- 容器表现为局域网内的独立主机,直接与内网设备通信。
- 使用场景:容器需直接暴露在局域网、接入传统网络设备(如数据库、打印机)。
6. container(与其他容器共享网络)
- 说明:一个容器与另一个容器共享网络命名空间。
- 应用场景:sidecar 模式、进程监控等。
三、Docker 网络的管理与配置
1. 查看与管理网络
docker network ls # 查看所有网络
docker network inspect <网络名> # 查看网络详情
docker network create <选项> <网络名> # 创建自定义网络
docker network rm <网络名> # 删除网络
2. 创建自定义 bridge 网络
- 支持服务自动发现、IP 地址指定、子网规划等高级功能。
docker network create --driver bridge --subnet 172.28.0.0/16 mybridge
docker run --network mybridge --name app1 ...
docker run --network mybridge --name app2 ...
# app1、app2 可相互通过容器名访问
3. 容器加入/离开网络
docker network connect mybridge mycontainer
docker network disconnect mybridge mycontainer
四、端口映射与外部访问
- 端口映射:将主机端口映射到容器端口,外部可通过主机访问容器。
docker run -p 8080:80 nginx
# 访问主机8080端口,相当于访问容器80端口
- 多端口映射/协议指定:
docker run -p 8080:80 -p 8443:443/tcp ...
五、网络隔离与安全
- 网络隔离:不同自定义网络互相隔离,容器间默认不可跨网络访问。
- 防火墙规则:可结合 host 防火墙(如 iptables、firewalld)强化安全。
- 安全建议:
- 只开放必要端口
- 生产环境避免用 host 网络
- 使用 overlay 网络自带加密通信
- 合理设置容器间访问策略
六、网络高级用法
1. 多网络绑定
- 一个容器可同时属于多个网络,便于实现跨网络通信。
docker network create net1
docker network create net2
docker run -d --name myapp --network net1 nginx
docker network connect net2 myapp
2. 网络别名
- 自定义网络下可为容器设置别名,便于服务发现和 DNS 解析。
docker run --network mynet --network-alias db ...
七、网络常见故障与排查
- 容器无法互通:检查网络是否为同一 bridge/overlay,自定义网络下容器名能做 DNS 解析。
- 端口冲突:host 网络或端口映射时主机端口被占用。
- 外部访问失败:检查端口映射、防火墙策略。
八、参考资料
- Docker 官方网络文档
- Docker 网络驱动详解