gpt4 book ai didi

json - Docker API 无法应用 json 过滤器

转载 作者:行者123 更新时间:2023-12-02 18:03:23 25 4
gpt4 key购买 nike

根据https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/list-tasks ,过滤器只能用于获取具有特定服务名称的正在运行的容器。出于某种原因,我得到了所有任务的完整列表,无论它们的名称或所需状态如何。我找不到任何将 curl 与 JSON 请求与 Docker API 一起使用的适当示例。我正在使用以下命令:

一个)

curl -X GET -H "Content-Type: application/json" -d '{"filters":[{ "service":"demo", "desired-state":"running" }]}' https://HOSTNAME:2376/tasks --cert ~/.docker/cert.pem --key ~/.docker/key.pem --cacert ~/.docker/ca.pem

返回所有内容

乙)试图从 Docker Remote API Filter Exited 得到一些东西

curl https://HOSTNAME:2376/containers/json?all=1&filters={%22status%22:[%22exited%22]} --cert ~/.docker/cert.pem   --key ~/.docker/key.pem   --cacert ~/.docker/ca.pem

这个返回“curl: (60) Peer's Certificate issuer is not recognized.”,所以我猜 curl 请求格式不正确。

我在 Docker 论坛上询问过,他们提供了一些帮助。我很惊讶互联网上没有任何关于如何将 Docker API 与 curl 一起使用的适当文档,或者它是如此明显而我不明白什么?

最佳答案

我应该在前面加上这样一个事实,即我从未见过 curl 错误地报告证书错误,而实际上存在某种其他问题,但我相信您关于这实际上不是证书问题的断言。

起初我以为你对 filters 的论点是不正确的,因为根据API reference , filters 参数是...

a JSON encoded value of the filters (a map[string][]string) to process on the containers list.

我不确定如何解释 map[string][]string,所以我在我的 Docker 客户端和服务器之间设置了一个日志代理并运行了 docker ps -f status =exited,它产生了以下请求:

GET /v1.24/containers/json?filters=%7B%22status%22%3A%7B%22exited%22%3Atrue%7D%7D HTTP/1.1\r

如果我们将参数解码为 filters,我们会看到它是:

{"status":{"exited":true}}

当你经过时:

{"status":["exited"]}

所以很明显,这是不同的,我假设这是问题的根源......但是当我试图验证这一点时,我遇到了一个奇怪的问题。我什至无法按照编写的那样运行你的 curl 命令行,因为 curl 试图执行一些由于大括号引起的通配行为:

$ curl http://localhost:2376/containers/json'?filters={%22status%22:[%22exited%22]}'
curl: (3) [globbing] nested brace in column 67

如果我正确地引用了你的过滤参数:

$ python -c 'import urllib; print urllib.quote("""{"status":["exited"]}""")'
%7B%22status%22%3A%5B%22exited%22%5D%7D

它似乎工作得很好:

$ curl http://localhost:2376/containers/json'?filters=%7B%22status%22%3A%5B%22exited%22%5D%7D'
[{"Id":...

如果我使用您的原始表达式并传递 -g(又名 --globoff)以禁用大括号扩展,我可以获得相同的行为:

$ curl -g http://localhost:2376/containers/json'?filters={%22status%22:[%22exited%22]}'
[{"Id":...

我想强调的一件事是在 docker 客户端和服务器之间设置代理的实用程序。如果您发现自己在问“我如何使用这个 API?”,一个很好的答案是查看 Docker 客户端在相同情况下究竟在做什么。

关于json - Docker API 无法应用 json 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39976683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com