2016-10-11 67 views
1

根據https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/list-tasks,過濾器只能用於獲取具有特定服務名稱的正在運行的容器。出於某種原因,我收到了所有任務的完整列表,無論他們的姓名或期望的狀態如何。我無法找到任何使用Docker API的JSON請求使用curl的適當示例。 我使用下面的命令:Docker API無法應用JSON過濾器

A)

捲曲-X GET -H 「內容類型:應用/ JSON」 -d「{ 「過濾器」:[{ 「服務」: 「demo」,「desired-state」:「running」}]}'https://HOSTNAME:2376/tasks --cert〜/ .docker/cert.pem --key〜/ .docker/key.pem --cacert〜/ .docker/ca。 PEM

返回一切

B) 努力得到的東西從工作

捲曲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進行卷曲的適當文檔,或者它是如此明顯,我不明白什麼?

+0

您收到證書錯誤。如果只是在curl命令行中添加'-k',會導致curl接受未知證書?這能解決問題嗎?這個問題的答案可能有助於找出你需要尋找解決方案的地方。 – larsks

+0

**證書不是問題,如果我不使用過濾器,我可以捲曲所需的信息。附:添加-k什麼也不做 – Stobor

回答

2

我應該在前面添加這樣一個事實,即我從來沒有見過curl錯誤地報告證書錯誤,但事實上在其他方面存在某種其他問題,但我相信您的斷言,這實際上不是證書問題。

我根據API reference原先以爲你的論點來filters是不正確的,因爲 的filters參數...

過濾器的JSON編碼值(圖[字符串] [ ]字符串)在容器列表上處理。

我不完全知道如何解釋map[string][]string,所以我成立了一個日誌代理我的泊塢窗客戶端和服務器之間跑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 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)以DISA ble的支撐擴展:

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

我想強調的一件事是堅持碼頭客戶端和服務器之間的代理的實用程序。如果你發現自己在問,「我該如何使用這個API?」,一個很好的答案是準確地看到Docker客戶端在同樣的情況下正在做什麼。

+0

您可以分享如何爲此設置日誌記錄代理嗎? – elpddev

+1

https://groups.google.com/forum/#!topic/docker-user/9ifqK4Jwko8 – larsks