在现代微服务架构中,容器间的网络通信是至关重要的一环。Docker 提供了强大的网络功能,而 docker network 命令则是管理这些网络功能的核心工具。无论你是 Docker 新手还是经验丰富的开发者,深入理解 Docker 网络命令都将极大地提升你的容器管理能力。
Docker 网络基础
在深入了解具体命令之前,让我们先快速回顾一下 Docker 的网络基础。Docker 支持多种网络驱动:
- bridge:默认网络驱动,适用于独立容器间通信
- host:移除容器与 Docker 主机间的网络隔离
- overlay:连接多个 Docker 守护进程,实现 Swarm 服务间通信
- macvlan:为容器分配 MAC 地址,使其在物理网络中显示为物理设备
- none:禁用所有网络
Docker Network 命令详解
1. 查看网络列表
docker network ls
这是最基础的命令,用于查看所有可用的 Docker 网络:
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
aabbccddeeff bridge bridge local
ffeeddccbbaa host host local
112233445566 none null local
常用选项:
-q, --quiet:只显示网络 ID--no-trunc:不截断输出-f, --filter:根据条件过滤
# 只显示网络ID
docker network ls -q
# 显示完整信息
docker network ls --no-trunc
# 过滤驱动类型为bridge的网络
docker network ls --filter driver=bridge
2. 创建网络
docker network create
创建自定义网络是实现复杂容器通信的第一步:
# 创建基础网络
docker network create my-network
# 创建带子网的自定义网络
docker network create \
--driver bridge \
--subnet 172.20.0.0/16 \
--gateway 172.20.0.1 \
my-custom-network
# 创建带IPAM配置的网络
docker network create \
--ipam-driver default \
--ipam-opt subnet=192.168.100.0/24 \
--ipam-opt gateway=192.168.100.1 \
my-ipam-network
常用选项:
-d, --driver:指定网络驱动(默认:bridge)--subnet:指定子网 CIDR--gateway:指定网关 IP--ip-range:指定容器 IP 范围--label:为网络添加元数据
3. 查看网络详情
docker network inspect
深入了解网络的配置和连接状态:
# 查看单个网络详情
docker network inspect my-network
# 查看多个网络详情
docker network inspect network1 network2
# 格式化输出(只显示网络名称和驱动)
docker network inspect --format='{
{.Name}}: {
{.Driver}}' my-network
示例输出:
[
{
"Name": "my-network",
"Id": "aabbccddeeff...",
"Created": "2023-10-01T10:00:00Z",
"Scope": "local",
"Driver": "bridge",
"IPAM": {
"Driver": "default",
"Config": [
{
"Subnet": "172.20.0.0/16",
"Gateway": "172.20.0.1"
}
]
},
"Containers": {
"container1": {
"Name": "web-app",
"EndpointID": "...",
"MacAddress": "02:42:ac:14:00:02",
"IPv4Address": "172.20.0.2/16"
}
}
}
]
4. 连接容器到网络
docker network connect
将运行中或已停止的容器连接到指定网络:
# 连接运行中的容器
docker network connect my-network my-container
# 连接时指定IP地址
docker network connect --ip 172.20.0.100 my-network my-container
# 连接时指定别名
docker network connect --alias db --alias database my-network my-container
常用选项:
--ip:指定 IPv4 地址--ip6:指定 IPv6 地址--alias:为容器添加网络别名--link:连接到另一个容器
5. 断开容器与网络的连接
docker network disconnect
从网络中移除容器:
# 强制断开连接(即使容器正在运行)
docker network disconnect -f my-network my-container
# 普通断开连接
docker network disconnect my-network my-container
6. 删除网络
docker network rm
删除不再需要的网络:
# 删除单个网络
docker network rm my-network
# 删除多个网络
docker network rm network1 network2 network3
# 强制删除(即使有容器连接)
docker network rm -f my-network
7. 清理未使用的网络
docker network prune
清理所有未被容器使用的网络:
# 交互式清理
docker network prune
# 强制清理(无需确认)
docker network prune -f
# 清理时包含指定标签的网络
docker network prune --filter "label=project=test"
常用选项:
-f, --force:跳过确认提示--filter:根据条件过滤
总结
Docker network 命令是容器网络管理的核心工具,掌握这些命令能够帮助你:
- 构建复杂的多容器应用架构
- 实现容器间的安全通信
- 优化网络性能和可靠性
- 快速排查网络问题
通过本文的详细介绍和实战示例,相信你已经对 Docker network 命令有了全面的了解。