【问题标题】:Docker Remote API Filter ExitedDocker 远程 API 过滤器已退出
【发布时间】:2015-01-20 20:04:33
【问题描述】:

我在 Docker Remote API Docs 中看到过滤器可用于过滤状态,但我不确定如何形成请求:

https://docs.docker.com/reference/api/docker_remote_api_v1.16/#list-containers

GET /containers/json?filters=status[exited] ?????

应该如何格式化以仅显示退出的容器?

【问题讨论】:

    标签: docker


    【解决方案1】:

    jwoddercorrect on the filter,但由于我不熟悉 Go 数据类型,因此我想逐步完成此操作。

    Docker API documentation 是指使用map[string][]string 作为过滤器,它是一个 Go 映射(哈希表)

    • map[string] 定义了一个带有string 类型键的映射

    • []string 是映射中值的类型定义。一片 [] 是一个没有固定长度的数组。然后切片由 string 值。

    因此 API 需要包含字符串的数组的哈希映射。这个Go Playground 演示了编组 Go 过滤器数据:

    mapS := map[string][]string{ "status":[]string{"exited"} }
    

    转成 JSON:

    { "status": [ "exited" ] }
    

    因此,将 JSON 添加到您获得的 Docker API 请求中:

    GET /containers/json?all=1&filters={%22status%22:[%22exited%22]}
    

    all=1 用于报告退出的容器(如命令行中的-a)。

    如果非 Go 人员只记录 API 的 JSON 结构,可能会更容易:/

    【讨论】:

    • 我尝试在浏览器中转义引号并使用 curl 但都没有给我任何结果。我怎样才能得到这个请求的有效响应?
    • 您需要添加all=1,以便exited被举报。答案已更新
    • 完美!这就是我所缺少的。这对我有用:localhost:5555/containers/json?all=1&filters={%22status%22:%5B%22exited%22%5D}
    • 非常感谢您的详细解释。
    【解决方案2】:

    将 docker 与 curl 一起使用的最优雅的方式,并且不用担心我在 this answer 中找到的编码。基本上,它告诉 curl 使用数据作为查询参数并对其进行编码。要退出容器,查询可能如下所示:

    curl -G -XGET "http://localhost:5555/containers/json" \
        -d 'all=1' \
        --data-urlencode 'filters={"status":["exited"]}' | python -m json.tool
    

    【讨论】:

      【解决方案3】:

      根据我对文档的阅读,应该是:

      GET /containers/json?filters={"status":["exited"]}
      

      不过,其中一些可能需要进行 URL 编码。

      【讨论】:

      猜你喜欢
      • 2014-03-22
      • 1970-01-01
      • 1970-01-01
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 2017-02-19
      • 2016-12-26
      • 2020-12-01
      相关资源
      最近更新 更多