【问题标题】:How do I filter docker swarm nodes by label?如何按标签过滤 docker swarm 节点?
【发布时间】:2021-03-01 00:38:49
【问题描述】:

我正在运行 docker 1.12.1,无法通过标签进行节点过滤。 我先加上“测试”标签:

$ docker node update --label-add test mr-host
mr-host

当我尝试按它过滤时,没有显示任何节点:

$ docker node ls --filter label=test
ID  HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS

按名称等其他标准过滤效果很好:

$ docker node ls --filter name=mr-host
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
1c48m4msidbqwx7vj0lwib8ef *  mr-host   Ready   Active        Leader

当我检查节点时会显示标签:

$ docker node inspect mr-host
[
    {
        "ID": "1c48m4msidbqwx7vj0lwib8ef",
        "Version": {
            "Index": 4865874
        },
        "CreatedAt": "2016-10-12T15:20:10.463286132Z",
        "UpdatedAt": "2016-10-13T16:29:03.113522485Z",
        "Spec": {
            "Labels": {
                "test": ""
            },
            "Role": "manager",
            "Availability": "active"
        },
        "Description": {
            "Hostname": "mr-host",
            "Platform": {
                "Architecture": "x86_64",
                "OS": "linux"
            },
            "Resources": {
                "NanoCPUs": 10000000000,
                "MemoryBytes": 67548012544
            },
            "Engine": {
                "EngineVersion": "1.12.1",
                "Plugins": [
                    {
                        "Type": "Network",
                        "Name": "bridge"
                    },
                    {
                        "Type": "Network",
                        "Name": "host"
                    },
                    {
                        "Type": "Network",
                        "Name": "null"
                    },
                    {
                        "Type": "Network",
                        "Name": "overlay"
                    },
                    {
                        "Type": "Volume",
                        "Name": "local"
                    }
                ]
            }
        },
        "Status": {
            "State": "ready"
        },
        "ManagerStatus": {
            "Leader": true,
            "Reachability": "reachable",
            "Addr": "192.168.0.118:2377"
        }
    }
]

我做错了什么?我很确定我已经正确地遵循了这里的文档:https://docs.docker.com/engine/reference/commandline/node_ls/#/id

【问题讨论】:

    标签: docker docker-swarm


    【解决方案1】:

    简单的答案:这并不像你想象的那样有效,但看起来他们可能会解决它。

    引用the Github issue:

    混淆来自于我们有两组标签这一事实:

    节点标签(您通过 docker node update 设置的标签) 引擎标签(您在启动 docker daemon 时设置的标签) --label) docker node ls 中的标签过滤是查看引擎标签而不是节点标签。

    我们可能应该恢复到节点标签过滤而不是引擎 过滤

    【讨论】:

      【解决方案2】:

      我相信您已经看到(基于收到的赞许),这是一个带有 docker swarm 的 known issue (#27231)

      【讨论】:

        【解决方案3】:

        这个问题终于解决了:#27231#issuecomment-767696365

        现在,您必须在过滤器前面加上“node”:

        docker node ls --filter node.label=test
        

        【讨论】:

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