首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问Go模板中的docker-cli字符串数组元素

访问Go模板中的docker-cli字符串数组元素
EN

Stack Overflow用户
提问于 2022-09-09 15:58:08
回答 1查看 92关注 0票数 -1

我创建了一个对接器容器,但似乎无法用docker和它的format参数(它使用Go模板)解析它的属性。

任何想法都很感激。

  1. 启动一个停靠容器,例如转到https://birthday.play-with-docker.com/cli-formating/并单击

环境准备部分中的docker命令。

  1. 选择一个用于解析的属性,例如端口。用docker container ls --format '{{ .Ports }}'打印应该会产生docker container ls --format '{{ .Ports }}'

试图在冒号之后获取端口范围部分的[0.0.0.0 80->80/tcp]

  • ,将属性拆分为":“(docker container ls --format '{{ split .Ports ":" }}'),这将生成数组

返回类型( []string. )是

  1. 字符串数组的长度为2 (docker container ls --format '{{ len (split .Ports ":") }}') .

  1. 访问索引值0 (docker container ls --format '{{ index (split .Ports ":") 0 }}')的结果与预期的0.0.0.0相同。

  1. 访问索引值1 (docker container ls --format '{{ index (split .Ports ":") 1 }}')无法执行模板:模板::1:2:执行“at :错误调用索引:反射:超出范围的切片索引,而不是80->80/tcp .
EN

回答 1

Stack Overflow用户

发布于 2022-09-21 09:06:26

为了访问字符串数组元素,我找到了一个解决方案。由于这个问题侧重于--format参数中的Go模板部分,因此我将只编写这方面的内容。

{{ index (split .Ports ":") 1 }}会产生一个错误,因为在这种情况下,index只是错误的函数。若要访问数组元素,请使用slice

使用[80->80/tcp].访问第二个数组元素(基于零的索引),这将产生[80->80/tcp].。

如果需要80->80/tcp.输出,可以使用""作为分隔符使用join转换slice对象,去掉输出:{{ join ( slice (split .Image ":") 1 ) "" }}生成string中的方括号

完整的命令是docker container ls --format '{{ join ( slice ( split .Ports ":" ) 1 ) "" }}'。请记住,Go模板使用一种前缀表示法,这种表示法看起来可能不那么常见。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73664732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档