--- title: "Docker Network" tags: [docker, networking, container] date: 2026-04-22 --- # Docker Network ## Definition Docker Network 是 Docker 提供的容器网络连接机制,支持多种网络驱动(bridge / host / overlay / macvlan / none),使容器能够相互通信并与外部网络交互。 ## Network Drivers | 驱动 | 用途 | 特点 | |------|------|------| | **bridge** | 默认网络驱动 | 容器通过虚拟网桥通信,默认 bridge IP 为 172.17.0.1 | | **host** | 移除网络隔离 | 容器直接使用宿主机网络栈 | | **overlay** | Docker Swarm 多主机通信 | 跨多个 Docker daemon | | **macvlan** | 给容器分配真实 MAC | 容器像物理机一样出现在网络中 | ## 查看与管理命令 ```bash # 查看所有网络 docker network ls # 查看特定网络的详细信息(驱动、容器、IP) docker network inspect bridge # 查看连接了某网络的容器 docker network inspect --format '{{range .Containers}}{{.Name}} {{end}}' # 创建自定义 bridge 网络 docker network create --driver bridge my_network # 删除网络 docker network rm my_network # 删除前先断开容器连接 docker network disconnect my_network container_name ``` ## Docker Compose 中的 Network ```yaml services: app: networks: - frontend - backend networks: frontend: driver: bridge backend: driver: bridge ``` ## Compose 项目间命名冲突 Docker Compose 默认以**项目目录名**作为网络名前缀: - 项目 A(目录 `~/portainer`)→ 网络名 `portainer_default` - 项目 B(目录 `~/portainer-stack`)→ 网络名 `portainer-stack_default` 当两个项目名不同但都声明了 `portainer_network` 时,会产生警告: > WARN: Network portainer_network declared as external, but it does not exist **解决方案**: 1. 删除旧网络:`docker network rm portainer_network` 2. 或在 compose 中声明 `external: true` 复用已存在的网络 ## External Mode(复用外部网络) ```yaml networks: portainer_network: external: true ``` 声明 `external: true` 后,Compose 不会尝试创建网络,而是直接使用已存在的同名网络。 ## Related Concepts - [[Docker Compose]] — compose 中声明式定义网络 - [[Docker堆栈]] — 堆栈中多服务共享网络 - [[桥接网络]] — Docker bridge 网络驱动 ## Related Entities - [[Portainer]] — Docker 可视化管理工具,提供网络管理 Web UI - [[群晖 NAS]] — Docker 网络配置的平台 - [[Docker]] — 网络系统的底层平台 ## See Also - [[家庭监控方案-prometheus-grafana-node-exporter-cadvisor-blackbox]] — Prometheus 部署涉及 Docker 网络配置