2016-10-11 2 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 "콘텐츠 형식 : 응용 프로그램/JSON" 나는 다음과 같은 명령을 사용하고 -d '{ "필터": [{ "서비스" "데모", "원하는 상태": "실행 중"}}} 'https://HOSTNAME:2376/tasks --cert ~/.docker/cert.pem --key ~/.docker/key.pem --cacert ~/.docker/ca. PEM

은 012,399,346,991,255에서 작업 뭔가를 얻으려고 모두에게

B) 를 돌려줍니다 6,

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

"curl : (60) 피어의 인증서 발급자가 인식되지 않습니다."를 반환하므로 컬 요청이 잘못되었다고 생각합니다.

나는 Docker 포럼에 질문을했으며 조금 도와주었습니다. Docker API를 사용하여 컬을 사용하는 방법에 관한 인터넷상의 적절한 문서가 없다는 것에 놀랍니다. 또는 너무 분명해서 뭔가를 이해하지 못합니까?

+0

인증서 오류가 발생했습니다. curl 명령 줄에'-k'를 추가하면 curl이 알려지지 않은 인증서를 받아 들일 수 있습니까? 그게 문제를 해결합니까? 이 질문에 대한 답은 해결책을 찾아야하는 곳을 파악하는 데 도움이 될 수 있습니다. – larsks

+0

** 인증서가 문제가되지 않습니다. 필터를 사용하지 않으면 필요한 정보를 말릴 수 있습니다. 추신. -k는 아무 것도하지 않음 – Stobor

답변

2

실제로이 문제가 일종의 다른 문제가있을 때 틀린 인증서 오류를보고 한 번도 본 적이 없다는 사실을 접두사로 사용해야하지만 실제로 인증서 문제가 아니라고 주장합니다. .

가 나는 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 

그것을 내가 원래 표현을 사용하는 경우

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

내가 같은 동작을 얻을 수 있으며, DISA에 (일명 --globoff) -g을 통과 : 잘 작동하는 것 같다 중괄호 확장을 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

관련 문제