docker inspect:如何仅从范围中选择某些键

时间:2017-11-18 10:02:55

标签: docker go

我创建了一个标签很少的泊坞窗图片,这是我在LABELS上的Dockerfile部分:

grep LABEL Dockerfile

LABEL "css1"="/var/www/css1"
LABEL "css2"="/var/www/css2"
LABEL "img"="/var/www/img"
LABEL "js"="/var/www/js"

然后:

docker image inspect --format='{{.Config.Labels}}' labels-test

map[css1:/var/www/css1 css2:/var/www/css2 img:/var/www/img js:/var/www/js]

我需要例如以 css 开头的所有标签。这是我能够想到的:

docker image inspect --format='{{range $k,$v:=.Config.Labels}}{{$k}}:{{$v}} {{end}}' labels-test

css1:/var/www/css1 css2:/var/www/css2 img:/var/www/img js:/var/www/js

所需的输出将是:

css1:/var/www/css1 css2:/var/www/css2

2 个答案:

答案 0 :(得分:2)

Go template functions are available in golang docco

eq可以测试arg1 == arg2 printf "%.3s" $k将为您提供字符串的前3个字符。

docker image inspect \
  --format='{{ range $k,$v:=.Config.Labels }}{{ if eq (printf "%.3s" $k) "css" }}{{ $k }}:{{ $v }} {{end}}{{end}}' \
  IMAGE

如果您需要进行更高级的处理,您可能希望直接查看Docker API images endpoint /images/IMAGE/json或在某处处理JSON输出:

docker image inspect \
  --format='{{json .Config.Labels}}' \
  IMAGE

答案 1 :(得分:0)

您可以执行类似

的操作

docker inspect --format='{{index (index (.Config.Labels)).css1 }}' labels-test

为我显示

/var/www/css1

以及

docker inspect --format='{{index (index (.Config.Labels)).css2 }}' labels-test

为我显示

/var/www/css2

请参阅我之前关于该主题的答案 How to get ENV variable when doing Docker Inspect

修改

以下详细说明了您的要求

docker inspect --format='{{index (index (.Config.Labels)).css1 }} {{index (index (.Config.Labels)).css2 }} labels-test

我得到了

/var/www/css1 /var/www/css2

相关问题