Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍Docker CLI 中 docker node ls 常用命令。

1、docker node ls 简介

docker node ls 是用于列出 Docker 集群中的节点。它可以用于查看 Docker 集群中所有节点的状态、角色和其他信息,以及与其他 Docker 命令一起使用来管理 Docker 集群。列出Docker集群管理器所知道的所有节点。可以使用-f--filter标志进行过滤。

参考文档:https://docs.docker.com/engine/reference/commandline/node_ls/

2、docker node ls 语法

docker node ls [OPTIONS]

注意:这是一个集群管理命令,必须在集群管理器节点上执行。

3、docker node ls 命令

1)列出所有节点

docker node ls

ID                           HOSTNAME        STATUS  AVAILABILITY  MANAGER STATUS
1bcef6utixb0l0ca7gxuivsj0    swarm-worker2   Ready   Active
38ciaotwjuritcdtn9npbnkuz    swarm-worker1   Ready   Active
e216jshn25ckzbvmwlnh5jr3g *  swarm-manager1  Ready   Active        Leader

在上面的示例输出中,有一个隐藏的列 .Self,表示节点是否与当前 Docker 守护程序是同一节点。一个星号(例如 e216jshn25ckzbvmwlnh5jr3g *)表示此节点是当前 Docker 守护程序。

2)筛选(--filter)

筛选标志(-f--filter)的格式为“key=value”。如果有多个筛选条件,则传递多个标志(例如 --filter "foo=bar" --filter "bif=baz")。

目前支持的筛选条件包括:

  • id
  • label
  • node.label
  • membership
  • name
  • role

3)使用id筛选

id 筛选器匹配节点 ID 的全部或部分内容。

docker node ls -f id=1

ID                         HOSTNAME       STATUS  AVAILABILITY  MANAGER STATUS
1bcef6utixb0l0ca7gxuivsj0  swarm-worker2  Ready   Active

4)使用label筛选

label 筛选器根据引擎标签和仅标签存在或标签和值的存在来匹配节点。引擎标签在守护程序配置中配置。要在 Swarm 节点标签上过滤,请使用 node.label

以下过滤器匹配具有 foo 标签的节点,而不考虑其值。

docker node ls -f "label=foo"

ID                         HOSTNAME       STATUS  AVAILABILITY  MANAGER STATUS
1bcef6utixb0l0ca7gxuivsj0  swarm-worker2  Ready   Active

4)使用node.label筛选

node.label 筛选器基于节点标签和节点标签单独存在或节点标签和值的存在来匹配节点。

以下过滤器将节点更新为具有区域节点标签。

docker node update --label-add region=region-a swarm-test-01
docker node update --label-add region=region-a swarm-test-02
docker node update --label-add region=region-b swarm-test-03
docker node update --label-add region=region-b swarm-test-04

显示所有具有区域节点标签集的节点。

docker node ls --filter node.label=region

ID                            HOSTNAME        STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
yg550ettvsjn6g6t840iaiwgb *   swarm-test-01   Ready     Active         Leader           23.0.3
2lm9w9kbepgvkzkkeyku40e65     swarm-test-02   Ready     Active         Reachable        23.0.3
hc0pu7ntc7s4uvj4pv7z7pz15     swarm-test-03   Ready     Active         Reachable        23.0.3
n41b2cijmhifxxvz56vwrs12q     swarm-test-04   Ready     Active                          23.0.3

显示所有具有区域节点标签,值为 region-a 的节点。

docker node ls --filter node.label=region=region-a

ID                            HOSTNAME        STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
yg550ettvsjn6g6t840iaiwgb *   swarm-test-01   Ready     Active         Leader           23.0.3
2lm9w9kbepgvkzkkeyku40e65     swarm-test-02   Ready     Active         Reachable        23.0.3

5)使用membership筛选

membership 筛选器基于成员身份和已接受或待处理的值来匹配节点。

以下过滤器匹配成员身份为 accepted 的节点。

docker node ls -f "membership=accepted"

ID                           HOSTNAME        STATUS  AVAILABILITY  MANAGER STATUS
1bcef6utixb0l0ca7gxuivsj0    swarm-worker2   Ready   Active
38ciaotwjuritcdtn9npbnkuz    swarm-worker1   Ready   Active

6)使用name筛选

name 筛选器匹配全部或部分节点主机名。以下过滤器与名称等于 swarm-master 字符串的节点匹配。

docker node ls -f name=swarm-manager1
ID                           HOSTNAME        STATUS  AVAILABILITY  MANAGER STATUS
e216jshn25ckzbvmwlnh5jr3g *  swarm-manager1  Ready   Active        Leader

7)使用role筛选

role 筛选器基于角色和工作程序或管理程序的值来匹配节点。

以下过滤器匹配具有管理程序角色的节点。

docker node ls -f "role=manager"

ID                           HOSTNAME        STATUS  AVAILABILITY  MANAGER STATUS
e216jshn25ckzbvmwlnh5jr3g *  swarm-manager1  Ready   Active        Leader

8)格式化输出(--format)

格式化选项(--format)使用 Go 模板对节点输出进行漂亮打印。

Go 模板的有效占位符如下:

占位符

描述

.ID

节点 ID

.Self

是否为守护进程的节点

(true/false,true 表示该节点与当前 Docker 守护进程相同)

.Hostname

节点主机名

.Status

节点状态

.Availability

节点可用性 (“active”, “pause”, or “drain”)

.ManagerStatus

节点的管理状态

.TLSStatus

节点的 TLS 状态

(“Ready” 或 “Needs Rotation” 意味着 TLS 证书由旧 CA 签名)

.EngineVersion

引擎版本

使用 --format 选项时,node ls 命令将按照模板声明的方式输出数据,或者在使用 table 指令时也会包含列标题。

以下示例使用没有标题的模板,并为所有节点输出 ID、Hostname 和 TLS 状态条目,它们之间用冒号(:)分隔:

docker node ls --format "{{.ID}}: {{.Hostname}} {{.TLSStatus}}"

e216jshn25ckzbvmwlnh5jr3g: swarm-manager1 Ready
35o6tiywb700jesrt3dmllaza: swarm-worker1 Needs Rotation

要以 JSON 格式列出所有节点,请使用 json 指令:

docker node ls --format json
{"Availability":"Active","EngineVersion":"23.0.3","Hostname":"docker-desktop","ID":"k8f4w7qtzpj5sqzclcqafw35g","ManagerStatus":"Leader","Self":true,"Status":"Ready","TLSStatus":"Ready"}

4、命令选项

命令

描述

--filter , -f

根据提供的条件过滤输出

--format

使用自定义模板格式化输出:

‘table’:以带有列标题的表格格式打印输出(默认)

‘table TEMPLATE’:使用给定的 Go 模板以表格形式打印输出

‘json’:以 JSON 格式打印

‘TEMPLATE’:使用给定的 Go 模板打印输出。

请参阅 https://docs.docker.com/go/formatting/ 了解有关使用模板格式化输出的更多信息。

--quiet , -q

只显示ID

5、子命令

命令

描述

docker node demote

将一个或多个节点从 Swarm 中的管理节点降级

docker node inspect

显示一个或多个节点的详细信息

docker node ls

列出Swarm中的节点

docker node promote

将一个或多个节点提升为 Swarm 中的管理节点

docker node ps

列出运行在一个或多个节点上的任务,默认为当前节点

docker node rm

从 Swarm 中移除一个或多个节点

docker node update

更新一个节点

推荐文档

相关文档

大家感兴趣的内容

随机列表