【问题标题】:How to list docker swarm nodes with labels如何使用标签列出 docker swarm 节点
【发布时间】:2021-04-20 19:08:27
【问题描述】:

如何轻松打印所有可用的 docker swarm 节点及其标签?

为节点添加标签,例如
$ docker node update --label-add type=one my_node_name
并且带有docker node ls 的默认列表节点不显示过滤器。

此外,我可以列出检查每个节点的标签,例如:

$ docker inspect my_node_name | grep type 
"type": "one"

---编辑--

类似的问题How do I filter docker swarm nodes by label?是关于过滤我的关于上市

【问题讨论】:

标签: docker label docker-swarm


【解决方案1】:

你可以运行类似的东西:

docker node ls -q | xargs docker node inspect \
  -f '{{ .ID }} [{{ .Description.Hostname }}]: {{ .Spec.Labels }}'

您可以调整它以使用更漂亮的格式设置范围,而不是打印默认地图:

docker node ls -q | xargs docker node inspect \
  -f '{{ .ID }} [{{ .Description.Hostname }}]: {{ range $k, $v := .Spec.Labels }}{{ $k }}={{ $v }} {{end}}'

随意将格式化输出更新为您需要的字段。

【讨论】:

  • 很棒的例子!只有一个问题 - 有没有办法打印固定长度的主机名(用空格填充),所以所有标签都在所有行中对齐?谷歌搜索但没有找到。类似于 fmt.Printf("%-10v", value) 但在 go 模板中
  • @Ivan 你可以做类似{{ printf "%25s" .Description.Hostname }}
  • @Ivan 和 BMitch(只能在此评论中标记你们中的 1 个):如果有这样的问答,值得为您的两个 cmets 打开一个单独的问题与答案,关于去模板化主机名输出还不存在。其他人不会在 cmets 中找到埋在此处的那一点信息...
【解决方案2】:

PowerShell 核心版本:

docker node ls -q | `
  ForEach-Object { `
    docker node inspect $_ --format '{{ json . }}' | `
    ConvertFrom-Json -Depth 99 } | `
  Select-Object { $_.Description.Hostname }, { $_.Spec.Labels }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多