docker network 详解
Docker 网络是 Docker 容器之间以及容器与外部世界通信的基础设施。Docker 提供了多种网络驱动和丰富的命令来管理容器网络。
Docker 网络类型
Docker 支持以下几种网络驱动:
-
bridge - 默认网络驱动,适用于独立容器通信
-
host - 移除容器与主机间的网络隔离
-
overlay - 连接多个 Docker 守护进程,实现 swarm 服务通信
-
macvlan - 为容器分配 MAC 地址,使其显示为物理设备
-
none - 禁用所有网络
-
ipvlan - 类似 macvlan 但不分配 MAC 地址
-
网络插件 - 集成第三方网络插件
Docker 网络常用命令
1. docker network ls - 列出所有网络
选项:
-
无特殊选项
示例:
docker network ls
2. docker network create - 创建新网络
选项:
-
--driver或-d- 指定网络驱动 (默认: bridge) -
--subnet- 指定子网 (如: 172.18.0.0/16) -
--gateway- 指定网关 (如: 172.18.0.1) -
--ip-range- 指定IP范围 (如: 172.18.1.0/24) -
--label- 添加元数据 -
--attachable- 允许手动容器连接 -
--internal- 限制外部访问 -
--ipv6- 启用IPv6网络 -
--scope- 设置网络范围 (swarm/local) -
--ingress- 创建 swarm 入口网络
示例:
docker network create -d bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 my-bridge-network
3. docker network inspect - 显示网络详细信息
选项:
-
--format或-f- 使用 Go 模板格式化输出 -
--verbose或-v- 显示详细信息
示例:
docker network inspect my-bridge-network
4. docker network connect - 将容器连接到网络
选项:
-
--alias- 为容器添加网络别名 -
--ip- 指定IPv4地址 -
--ip6- 指定IPv6地址 -
--link- 添加链接到另一个容器 -
--link-local-ip- 添加链接本地地址
示例:
docker network connect --alias db my-bridge-network my-container
5. docker network disconnect - 断开容器与网络的连接
选项:
-
--force或-f- 强制断开连接
示例:
docker network disconnect my-bridge-network my-container
6. docker network prune - 删除所有未使用的网络
选项:
-
--force或-f- 不提示确认 -
--filter- 提供过滤值 (如: 'until=24h')
示例:
docker network prune
7. docker network rm - 删除一个或多个网络
选项:
-
无特殊选项
示例:
docker network rm network1 network2
网络驱动详解
bridge 网络
-
默认网络驱动
-
适用于同一Docker主机上的容器通信
-
通过docker0网桥实现
-
提供NAT功能使容器可以访问外部网络
host 网络
-
容器直接使用主机网络
-
无需端口映射
-
性能最好但安全性最低
-
容器网络与主机完全共享
overlay 网络
-
用于Docker Swarm集群
-
允许多个主机上的容器通信
-
自动处理路由和负载均衡
-
需要配置键值存储(如Consul, Etcd)
macvlan 网络
-
为容器分配MAC地址
-
使容器显示为物理网络设备
-
需要网络设备支持混杂模式
-
适用于需要直接暴露到物理网络的场景
none 网络
-
容器没有网络接口
-
只有loopback设备
-
适用于完全隔离的网络需求
高级网络配置
自定义DNS
docker network create --dns 8.8.8.8 --dns 8.8.4.4 my-network
网络连接检查
docker network inspect --format='{{range .Containers}}{{.Name}} {{end}}' my-network
网络过滤器
docker network ls --filter driver=bridge
docker network prune --filter "until=24h"
最佳实践
-
生产环境避免使用默认bridge网络
-
为不同应用创建独立的网络
-
使用网络别名简化服务发现
-
敏感服务使用内部网络
-
监控网络流量和性能
-
定期清理未使用的网络资源
通过合理使用Docker网络功能,可以实现容器间安全高效的通信,满足各种复杂的应用场景需求。

浙公网安备 33010602011771号