Docker 获取已创建网络的 IP 地址列表(子网的 IP 范围)

9

如果您使用命令:

docker network ls

您会得到所有Docker网络的输出列表,但缺少这些网络的IP范围。

如何获取所有已创建的子网IP范围?

例如,如果我使用以下命令:

docker network create --subnet 172.31.0.1/16 --internal network-one
docker network create --subnet 173.31.0.1/16 --internal network-two

我想获取包含地址范围的列表。
172.31.0.1/16
173.31.0.1/16

如果我能以以下格式从CLI输出中获取列表,那就完美了:

network-one 172.31.0.1/16
network-two 173.31.0.1/16
...

因此,我可以将其作为Bash数组加载,并稍后逐行解析或将其传输到另一个CLI命令。

4个回答

12

请尝试以下命令:

docker network inspect $(docker network ls | awk '$3 == "bridge" { print $1}') | jq -r '.[] | .Name + " " + .IPAM.Config[0].Subnet' -

5
docker network inspect $(docker network ls -q)|grep -E "IPv(4|6)A"

0
我在Bash中使用以下命令:
docker network ls --format "{{.Name}}" | while read i; do echo $i --- $(docker network inspect $i | grep Subnet); done

它读取网络列表,然后获取每个网络的子网字段。


0
这将产生所请求的精确输出。
docker network inspect $(docker network ls -q) | jq -r 'map(to_entries) | map ([.[0].value, .[6].value.Config[0].Subnet ]) | .[] | @tsv' | column -t

解释
docker network inspect $(docker network ls -q)

获取所有网络ID的列表,并检查每个网络ID。
jq -r 'map(to_entries) | map ([.[0].value, .[6].value.Config[0].Subnet ]) | .[] | @tsv'

生成JQ命令的原始输出。解释如下: - `map(to_entries)` 生成一个带有键和值的网络对象列表 - `map([.[0].value, .[6].value.Config[0].Subnet ])` 对前面列表中的每个项目创建一个数组,该数组由项目的第0个值和项目的第6个值构成,第6个值是一个包含名为Config的数组的对象,我们从中取出第一个条目(0),然后从中取出Subnet值 - `.[]` 将生成的数组展开为原始数组列表 - `@tsv` 将以换行符分隔的数组格式化为制表符分隔的值表示形式
column -t

将制表符分隔的值格式化为终端列。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接