跳到主要内容

Podman 网络管理介绍

概述

Podman 是一个开源的容器运行时,允许用户在没有守护进程的情况下运行容器。其中,网络管理是 Podman 的一项关键功能,允许用户创建、查看、删除和管理容器网络。

Podman 支持多种网络后端,其中最常用的是 Netavark 和 CNI(容器网络接口)。Netavark 是 Podman 的默认网络后端,它提供了简单且高效的容器网络管理。而 CNI 则是一个更通用的容器网络解决方案,但它在 Podman 中的使用已逐渐被 Netavark 所取代。

在 Podman 中,网络的管理主要通过 podman network 命令完成。该命令提供了多个子命令,用于执行不同的网络操作。

命令

命令手册页描述
connectpodman-network-connect(1)将容器连接到网络
createpodman-network-create(1)创建一个 Podman 网络
disconnectpodman-network-disconnect(1)将容器从网络中断开连接
existspodman-network-exists(1)检查给定的网络是否存在
inspectpodman-network-inspect(1)显示一个或多个网络的配置信息
lspodman-network-ls(1)显示网络的摘要
prunepodman-network-prune(1)删除所有未使用的网络
reloadpodman-network-reload(1)重新加载容器的网络配置
rmpodman-network-rm(1)删除一个或多个网络
updatepodman-network-update(1)更新已存在的 Podman 网络

这些命令用于通过 Podman 管理容器网络。Podman 是一个开源的容器引擎,用于在主机上管理容器。这些网络命令允许用户创建、连接、断开、检查、列出、清理、重新加载、删除和更新网络。每个命令都有其特定的用途,用户可以根据需要选择相应的命令来执行网络管理任务。

Podman 网络

默认的桥接网络(名为 podman)使用 10.88.0.0/16 作为子网。当 Podman 以 root 用户身份运行时,podman 网络被用作默认网络。这等同于添加 --network bridge--network podman 选项。这个子网可以在 containers.conf(5) 文件的 [network] 部分中更改。将 default_subnet 设置为环境中可用的任何子网。默认网络的名称也可以从 podman 更改为其他名称,使用 default_network 键来更改。请注意,这仅在没有任何容器运行时才执行。

Slirp4netns

当 Podman 以非 root 用户身份运行时,它默认使用 slirp4netns 提供互联网连接。Slirp4netns 使用 10.0.2.0/24 作为其默认网络。这也可以在 containers.conf(5) 文件中更改,但需要在 [engine] 部分进行。使用 network_cmd_options 键,并添加 ["cidr=X.X.X.X/24"] 作为值。请注意,slirp4netns 需要网络前缀大小在 1 到 25 之间。此选项接受一个数组,因此可以像 podman-network-create(1) 手册页中描述的那样,在逗号分隔的字符串中添加更多选项。如果要为单个容器更改 CIDR,请在命令行上使用 --network 选项指定它,如下所示:--network slirp4netns:cidr=192.168.1.0/24

当以非 root 用户身份使用默认网络(即 --network podman/bridge)时,它还会使用上面描述的相同子网,以及 slirp4netns 子网。

子命令

podman network create

用于创建新的容器网络。用户可以指定网络的名称、子网、网关等参数。例如:

podman network create --subnet 172.18.0.0/16 mynetwork

这条命令将创建一个名为 mynetwork 的新网络,并指定其子网为 172.18.0.0/16

podman network list

用于列出所有已创建的容器网络。用户可以查看网络的名称、ID、子网等详细信息。例如:

podman network list

podman network inspect

用于查看指定网络的详细信息。用户可以获取网络的配置、连接的容器等信息。例如:

podman network inspect mynetwork

这条命令将显示 mynetwork 网络的详细信息。

podman network remove

用于删除指定的容器网络。在删除网络之前,需要确保没有容器正在使用该网络。例如:

podman network remove mynetwork

这条命令将删除名为 mynetwork 的网络。

podman network connect

用于将容器连接到指定的网络。这允许容器与其他容器或主机进行通信。例如:

podman network connect mynetwork mycontainer

这条命令将 mycontainer 容器连接到 mynetwork 网络。

podman network disconnect

用于将容器从指定的网络中断开连接。断开连接后,容器将无法再与该网络中的其他容器或主机进行通信。例如:

podman network disconnect mynetwork mycontainer

这条命令将从 mynetwork 网络中断开 mycontainer 容器的连接。

注意事项

  • 在使用 Podman 进行网络管理时,需要确保主机上已正确安装和配置了网络后端(如 Netavark 或 CNI)。
  • 在创建网络时,可以根据需要指定不同的子网、网关等参数,以满足特定的网络需求。
  • 在删除网络之前,务必确保没有容器正在使用该网络,否则可能会导致数据丢失或容器无法正常工作。

参阅

  • Podman 官方文档:包含 Podman 的详细使用说明和配置选项。
  • Netavark 文档:了解 Netavark 网络后端的更多信息和配置方法。
  • CNI 文档:了解 CNI(容器网络接口)的详细信息和规范。