2016-10-11 3 views
1

В соответствии с https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/list-tasks фильтр может использоваться только для запуска контейнеров с определенным именем службы. По какой-то причине я получаю полный список всех задач, независимо от их имен или желаемых состояний. Я не могу найти подходящих примеров использования curl с запросами JSON с Docker API. Я использую следующую команду:Docker API не может применять json-фильтры

A)

локон -X ПОЛУЧИТЬ -H "Content-Type: применение/JSON" -d «{ "фильтры": [{ "сервис": «demo», «желаемое состояние»: «running»}]} 'https://HOSTNAME:2376/tasks --cert ~/.docker/cert.pem --key ~/.docker/key.pem --cacert ~/.docker/ca. PEM

Возвращает все,

B) пытается получить что-то работает от Docker Remote API Filter Exited

завиток 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 »не распознан.», поэтому я предполагаю, что запрос на завиток искажен.

Я спросил на форумах Докера, и они немного помогли. Я поражен тем, что в Интернете нет надлежащей документации о том, как использовать Docker API с завитом или это настолько очевидно, и я что-то не понимаю?

+0

Вы получаете ошибку сертификата. Что делать, если вы просто добавляете '-k' в командную строку curl, что заставляет curl принимать неизвестные сертификаты? Это решение проблемы? Ответ на этот вопрос может помочь выяснить, где вам нужно искать решение. – larsks

+0

** Сертификаты не являются проблемой, я могу завивать необходимую информацию, если я не использую фильтры. постскриптум добавление -k ничего не делает – Stobor

ответ

2

Я должен префикс этого факта, что я никогда не видел, чтобы curl ошибочно сообщал об ошибке сертификата, когда на самом деле была какая-то другая проблема в игре, но я верю вашему утверждению, что на самом деле это не проблема с сертификатом ,

Я сначала подумал, что ваш аргумент filters был неправильным, потому что по API reference параметр 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 

It кажется, работает просто отлично:

$ 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

Смежные вопросы