Docker网络是容器化环境中实现容器间通信以及容器与外部网络交互的核心机制,通过docker network
命令可以轻松创建、管理、查看和连接自定义网络,Docker提供了多种网络驱动类型,包括bridge、host、overlay、macvlan等,每种驱动适用于不同的场景,满足从单机容器通信到跨主机集群部署的需求。

Docker网络基础
默认情况下,Docker启动时会创建三种网络:bridge(桥接网络,默认)、none(无网络)、host(主机网络),bridge网络是Docker最常用的网络模式,它会为每个容器创建一个独立的虚拟网卡,并通过Docker网桥(docker0)与宿主机网络进行连接,实现容器间的隔离与通信,而自定义网络则提供了更高级的功能,如容器名称自动解析、负载均衡、网络隔离等。
常用docker network
命令及使用场景
查看网络列表
使用docker network ls
命令可以列出Docker主机上的所有网络:
docker network ls
输出结果包含网络ID、驱动类型、名称、作用域等信息,默认网络中,bridge为桥接网络,host为共享主机网络,none为禁用网络,自定义网络则以用户指定的名称显示。
创建自定义网络
通过docker network create
命令可以创建自定义网络,支持指定驱动类型、子网、网关等参数,创建一个名为my-network
的桥接网络,并指定子网:

docker network create --driver bridge --subnet 172.20.0.0/16 my-network
若需创建跨主机通信的overlay网络,需在Docker Swarm集群环境中执行:
docker network create --driver overlay --subnet 10.0.0.0/24 overlay-network
查看网络详情
使用docker network inspect [网络名称/ID]
命令可以查看网络的详细配置,包括子网、网关、连接的容器等信息:
docker network inspect my-network
输出结果为JSON格式,包含网络类型、IPAM配置、容器连接状态等关键数据。
连接容器到网络
运行容器时可通过--network
参数将其加入指定网络,或使用docker network connect
命令将已运行的容器连接到网络,创建容器时加入my-network
:

docker run -d --name container1 --network my-network nginx
为已运行的容器container2
连接网络:
docker network connect my-network container2
连接后,容器可通过容器名称或别名相互通信,无需依赖IP地址。
断开容器与网络的连接
使用docker network disconnect
命令可断开容器与网络的连接:
docker network disconnect my-network container2
断开连接后,容器将无法通过该网络与其他容器通信。
删除网络
使用docker network rm [网络名称/ID]
命令可删除自定义网络,删除前需确保网络中没有容器连接,否则需先断开所有容器的连接:
docker network rm my-network
网络驱动类型对比
驱动类型 | 适用场景 | 特点 |
---|---|---|
bridge | 单机容器通信 | 默认驱动,容器间隔离,支持端口映射,可通过容器名解析 |
host | 高性能网络需求 | 容器共享宿主机网络栈,无网络隔离,性能最佳 |
overlay | 多主机容器通信 | 支持跨主机通信,需Docker Swarm或Kubernetes环境 |
macvlan | 容器直接通信物理网络 | 为容器分配MAC地址,模拟物理网络设备,适合与现有网络集成 |
网络配置示例
场景:搭建一个多容器Web应用,实现前端与后端服务通信
- 创建自定义网络:
docker network create app-network
- 启动后端服务(如数据库)并加入网络:
docker run -d --name db --network app-network -e MYSQL_ROOT_PASSWORD=secret mysql:5.7
- 启动前端服务(如Nginx)并加入网络,通过容器名访问后端:
docker run -d --name web --network app-network -p 8080:80 nginx
在Nginx配置中,可通过
http://db
访问数据库服务,无需关心IP地址。
相关问答FAQs
Q1: 如何解决自定义网络中容器无法通过容器名通信的问题?
A: 确保容器连接到同一个自定义网络(非默认bridge网络),且Docker的DNS服务已启用,自定义网络默认支持容器名解析,若仍无法通信,可检查容器是否正确连接网络(docker network inspect
查看容器列表),或重启容器使DNS配置生效。
Q2: 删除网络时报错“Error: network xxx has active endpoints”,如何处理?
A: 错误提示表示网络中仍有容器连接,需先断开所有容器与网络的连接,再删除网络,执行以下命令:
- 查看网络中的容器:
docker network inspect xxx --format '{{json .Containers}}'
- 逐个断开连接:
docker network disconnect xxx 容器名
- 删除网络:
docker network rm xxx
若容器已停止,可直接使用docker network prune
清理未使用的网络。