Mig*_*jas 5 parsing docker docker-swarm
我正在尝试从全局部署在多个 swarm 节点上的服务获取内部(容器级别)IP。
与此类似的东西。
docker node ls -q | xargs docker node inspect -f '{{ .ID }} [{{ .Description.Hostname }}]: {{ .Spec.Labels }} {{ .Status.Addr }}'
Run Code Online (Sandbox Code Playgroud)
这将返回每个节点的主机 IP 以及这些主机上的标签。
我开始使用以下命令检索所有节点上特定服务的所有 ID:
docker service ps [swarm_task] -q
Run Code Online (Sandbox Code Playgroud)
然后像这样检查每一个:
docker service ps [swarm_task] -q | xargs docker inspect -f '{{ .NetworksAttachments.Addresses }}'
Run Code Online (Sandbox Code Playgroud)
但 IP 地址的格式不同,我收到此错误:
Template parsing error: template: :1:23: executing "" at <.NetworksAttachments...>: can't evaluate field Addresses in type interface {}
检查内部的格式是这样的:
"Addresses": [
"10.0.0.187/24"
]
Run Code Online (Sandbox Code Playgroud)
docker 的参数--format是标准的 go文本/模板表达式。
由于NetworksAttachments是数组,您可能必须迭代NetworksAttachments才能获得有效的输出。
该range关键字的设计目的是:
$ docker service ps [swarm service name] -q --filter "desired-state=Running" \
| xargs docker inspect --format '{{range .NetworksAttachments}}{{.Addresses}}{{end}}'
Run Code Online (Sandbox Code Playgroud)
我的 Docker 引擎输出是:
[10.x.x.y/16]
[10.x.x.z/16]
Run Code Online (Sandbox Code Playgroud)
我添加了--filter "desired-state=Running"todocker service ps仅专注于运行容器。
可以参考Go文本/模板文档:
{{范围管道}} T1 {{end}}
管道的值必须是数组、切片、映射或通道。如果管道的值长度为零,则不输出任何内容;否则,将 dot 设置为数组、切片或映射的连续元素,并执行 T1。如果值是映射并且键是具有定义顺序(“可比较”)的基本类型,则将按排序键顺序访问元素。
| 归档时间: |
|
| 查看次数: |
1898 次 |
| 最近记录: |