我正在使用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中的错误?感谢您提供任何帮助!
答案 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 编码。