在Docker API中的标签上过滤不起作用(可能的错误?)

时间:2018-04-05 17:46:23

标签: rest api docker containers

我正在使用Docker API以JSON格式获取有关容器的信息。基本上,我想基于标签值进行过滤,但它不起作用(只返回所有容器)。如果您只使用命令行docker,即:

,此过滤器查询将起作用

docker ps -a -f label = owner = fred -f label = speccont = true

但是,如果我尝试使用API​​进行等效的过滤查询,它只返回所有容器(没有过滤),即:

curl -s --unix-socket /var/run/docker.sock http:/ containers / json?all = true& filters = {“label”:[“speccont = true”,“owner = fred”] }

请注意,我执行它时会执行uri转义过滤器参数,但为了便于阅读,我只是将其显示在此处。

我在这里做错了吗?或者这似乎是Docker API中的错误?感谢您提供任何帮助!

2 个答案:

答案 0 :(得分:0)

我觉得API也存在错误。但事实证明没有。我的API版本为1.30。

我通过此电话获得了理想的结果:

curl -sS localhost:4243/containers/json?filters=%7B%22ancestor%22%3A%20%5B%222bab985010c3%22%5D%7D

我使用上面使用的url转义字符串:

python -c 'import urllib; print urllib.quote("""{"ancestor": ["2bab985010c3"]}""")'

答案 1 :(得分:0)

Docker API v1.41 开始,通过 label 过滤容器的正确语法是

curl -s -G -X GET --unix-socket /var/run/docker.sock http://localhost/containers/json" \
--data 'all=true' \
--data-urlencode 'filters={"label":["speccont=true","owner=fred"]}'

请注意此 stackexchange post 中提到的自动 URL 编码。