2016-10-11 3 views
1

https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/list-tasksによれば、フィルタは特定のサービス名を持つ実行中のコンテナを取得するためにのみ使用できます。何らかの理由で、名前や希望する状態に関係なく、すべてのタスクの完全なリストを取得しています。 Docker APIでJSONリクエストでカールを使用する適切な例が見つかりません。Docker APIはjsonフィルタを適用できません

A)

カール-X GET -H "のContent-Type:アプリケーション/ JSON" 私は、次のコマンドを使用してい-d「{ "フィルタ":[{ "サービス": "デモ"、 "望ましい状態": "実行中"}]} '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が認識されません」という結果を返します。したがって、カール要求が不正です。

私はDockerフォーラムで質問してくれて、少し助けました。 Docker APIをカールで使用する方法についてインターネット上のどこにも適切なドキュメントがないことに驚いていますか、それともそれほど明白で何かを理解できませんか?

+0

証明書のエラーが表示されます。 curlコマンドラインに '-k'を追加すれば、curlは不明な証明書を受け入れるでしょうか?それは問題を解決しますか?その質問に対する答えは、あなたが解決策を探す必要がある場所を理解するのに役立ちます。 – larsks

+0

**証明書は問題ではありません。フィルタを使用しない場合は、必要な情報をカールできます。 p.s. -kは何もしません – Stobor

答えて

2

実際に何らかの問題が発生したときにカールが誤って証明書のエラーを報告していることを私は見たことがありませんが、これは実際に証明書の問題ではないというあなたの主張を信頼します。

API referenceによると、 filtersパラメータは...

フィルタのJSONエンコードされた値(マップ[文字列] [あるので、私は、filtersへのあなたの引数が間違っていたことを最初に考え

]文字列)を使用してコンテナリストを処理します。

私は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":... 

私は私があなたの元の式を使用した場合と同じ動作を取得し、DISAに-g(別名--globoff)を渡すことができますブレース展開をBLE:私が強調したい

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

ことの一つは、ドッキングウィンドウのクライアントとサーバ間のプロキシをこだわりのユーティリティです。優れた答えは、Dockerクライアントが同じ状況で何をしているのかを正確に見ることです。

+0

その目的のためにロギングプロキシを設定する方法を共有できますか? – elpddev

+1

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

関連する問題