Docker-Py 网络管理 API 详解
2025-07-07 05:04:29作者:滑思眉Philip
概述
在 Docker 生态系统中,网络管理是一个核心功能。docker-py 作为 Docker 官方 Python SDK,提供了完整的网络管理 API,使开发者能够以编程方式管理 Docker 网络。本文将深入解析 docker-py 中的 NetworkApiMixin 类,帮助开发者掌握 Docker 网络管理的各种操作。
网络列表查询
networks()
方法提供了查询 Docker 网络中所有网络的能力,类似于 docker network ls
命令。
def networks(self, names=None, ids=None, filters=None):
参数说明
names
: 按网络名称过滤,接受字符串列表ids
: 按网络 ID 过滤,接受字符串列表filters
: 高级过滤条件字典,支持以下过滤项:driver
: 按驱动类型过滤label
: 按标签过滤,支持键值对或键列表type
: 按网络类型过滤("custom" 或 "builtin")
使用示例
# 查询所有网络
all_networks = client.networks()
# 查询特定名称的网络
named_networks = client.networks(names=['my-network'])
# 使用复杂过滤条件
filtered = client.networks(filters={
'driver': 'bridge',
'label': 'environment=production'
})
创建网络
create_network()
方法允许创建新的 Docker 网络,功能等同于 docker network create
命令。
def create_network(self, name, driver=None, options=None, ipam=None,
check_duplicate=None, internal=False, labels=None,
enable_ipv6=False, attachable=None, scope=None,
ingress=None):
核心参数解析
-
基础配置
name
: 网络名称(必填)driver
: 网络驱动类型(如 bridge、overlay 等)options
: 驱动特定选项的键值对
-
IP 地址管理(IPAM)
ipam
: 自定义 IP 地址管理配置- 可配置子网、网关、IP 范围等
-
高级特性
internal
: 是否创建内部网络(限制外部访问)enable_ipv6
: 启用 IPv6 支持attachable
: 允许工作节点上的非服务容器连接ingress
: 创建 swarm 模式下的路由网格网络
创建示例
基础网络创建:
client.create_network("backend", driver="bridge")
带 IPAM 的高级网络:
from docker.types import IPAMPool, IPAMConfig
ipam_pool = IPAMPool(
subnet='192.168.100.0/24',
gateway='192.168.100.1',
iprange='192.168.100.128/25'
)
ipam_config = IPAMConfig(pool_configs=[ipam_pool])
client.create_network(
name="secure-net",
driver="bridge",
ipam=ipam_config,
internal=True,
labels={"environment": "production"}
)
网络维护操作
删除网络
remove_network()
方法用于删除指定网络:
def remove_network(self, net_id):
示例:
client.remove_network("network_id_or_name")
清理未使用网络
prune_networks()
方法可清理所有未使用的网络:
def prune_networks(self, filters=None):
示例:
# 清理所有未使用网络
result = client.prune_networks()
print(f"释放空间: {result['SpaceReclaimed']}字节")
# 带过滤条件的清理
client.prune_networks(filters={"until": "24h"})
网络详情查询
inspect_network()
提供网络的详细信息:
def inspect_network(self, net_id, verbose=None, scope=None):
示例:
details = client.inspect_network("my-network")
print(details['IPAM']['Config'][0]['Subnet'])
容器网络连接管理
连接容器到网络
def connect_container_to_network(self, container, net_id,
ipv4_address=None, ipv6_address=None,
aliases=None, links=None,
link_local_ips=None, driver_opt=None,
mac_address=None):
关键参数:
aliases
: 网络内访问容器的别名ipv4_address
/ipv6_address
: 指定静态 IPmac_address
: 指定 MAC 地址
示例:
client.connect_container_to_network(
container="webapp",
net_id="backend",
aliases=["web", "appserver"],
ipv4_address="172.20.0.5"
)
断开容器连接
def disconnect_container_from_network(self, container, net_id,
force=False):
强制断开连接示例:
client.disconnect_container_from_network(
container="webapp",
net_id="backend",
force=True
)
版本兼容性说明
docker-py 网络 API 实现了版本兼容性检查,主要特性与 Docker API 版本的对应关系:
- 网络标签: API 1.23+
- IPv6 支持: API 1.23+
- 内部网络: API 1.22+
- 可附加网络: API 1.24+
- Ingress 网络: API 1.29+
- 网络作用域: API 1.30+
当使用不兼容的功能时,会抛出 InvalidVersion
异常。
最佳实践
- 网络隔离:为不同服务创建独立网络,增强安全性
- IPAM 规划:提前规划子网划分,避免 IP 冲突
- 标签管理:使用标签标记网络用途和环境
- 版本检查:在代码中添加版本兼容性检查
- 资源清理:定期使用 prune 清理未使用网络
总结
docker-py 的网络 API 提供了完整的 Docker 网络管理能力,从基础网络创建到高级 IPAM 配置,再到容器网络连接管理,覆盖了所有常见使用场景。通过合理使用这些 API,开发者可以构建出灵活、安全的容器网络架构,满足各种复杂的部署需求。