Skip to content

Parse streaming responses #4

@clue

Description

@clue

Some actions (like pulling images, viewing logs, attaching to containers etc.) produce streaming output. We should parse these HTTP streaming responses into individual virtual streams and forward any events on the virtual stream.

Also notice the difference between HTTP/1.0 and HTTP/1.1 requests.

HTTP/1.0 streaming body:

echo -en "POST /images/create?fromImage=clue/redis-benchmark HTTP/1.0\r\n\r\n" | nc -U /var/run/docker.sock
HTTP/1.0 200 OK
Content-Type: application/json
Date: Thu, 27 Nov 2014 09:42:15 GMT

{"status":"Pulling repository clue/redis-benchmark"}
{"status":"Pulling image (latest) from clue/redis-benchmark","progressDetail":{},"id":"478a1142ea76"}{"status":"Pulling image (latest) from clue/redis-benchmark, endpoint: https://registry-1.docker.io/v1/","progressDetail":{},"id":"478a1142ea76"}{"status":"Pulling dependent layers","progressDetail":{},"id":"478a1142ea76"}{"status":"Download complete","progressDetail":{},"id":"511136ea3c5a"}{"status":"Download complete","progressDetail":{},"id":"f10807909bc5"}{"status":"Download complete","progressDetail":{},"id":"f6fab3b798be"}{"status":"Download complete","progressDetail":{},"id":"1e6ac0ffed3b"}{"status":"Download complete","progressDetail":{},"id":"62ff5003ac9a"}{"status":"Download complete","progressDetail":{},"id":"c6e4fc6c4a10"}{"status":"Download complete","progressDetail":{},"id":"984fd90de307"}{"status":"Download complete","progressDetail":{},"id":"4784dfba86d0"}{"status":"Download complete","progressDetail":{},"id":"4d4120826ad3"}{"status":"Download complete","progressDetail":{},"id":"b2428b25e452"}{"status":"Download complete","progressDetail":{},"id":"28995deeed39"}{"status":"Download complete","progressDetail":{},"id":"9cd1838bd19c"}{"status":"Download complete","progressDetail":{},"id":"c78781ea905b"}{"status":"Download complete","progressDetail":{},"id":"d7173b5f3fc7"}{"status":"Download complete","progressDetail":{},"id":"6a8a6a35a96b"}{"status":"Download complete","progressDetail":{},"id":"28fdd31ac753"}{"status":"Download complete","progressDetail":{},"id":"3ce54e911389"}{"status":"Download complete","progressDetail":{},"id":"b7261e19024d"}{"status":"Download complete","progressDetail":{},"id":"bb182a1a4f8e"}{"status":"Download complete","progressDetail":{},"id":"cabbf32a5995"}{"status":"Download complete","progressDetail":{},"id":"478a1142ea76"}{"status":"Download complete","progressDetail":{},"id":"478a1142ea76"}{"status":"Status: Image is up to date for clue/redis-benchmark"}
…

HTTP/1.1 streaming body uses chunked encoding:

$ echo -en "POST /images/create?fromImage=clue/redis-benchmark HTTP/1.1\r\n\r\n" | nc -U /var/run/docker.sock    
HTTP/1.1 200 OK
Content-Type: application/json
Date: Thu, 27 Nov 2014 09:43:27 GMT
Transfer-Encoding: chunked

36
{"status":"Pulling repository clue/redis-benchmark"}

65
{"status":"Pulling image (latest) from clue/redis-benchmark","progressDetail":{},"id":"478a1142ea76"}
91
{"status":"Pulling image (latest) from clue/redis-benchmark, endpoint: https://registry-1.docker.io/v1/","progressDetail":{},"id":"478a1142ea
76"}
4d
{"status":"Pulling dependent layers","progressDetail":{},"id":"478a1142ea76"}
46
{"status":"Download complete","progressDetail":{},"id":"511136ea3c5a"}
46
{"status":"Download complete","progressDetail":{},"id":"f10807909bc5"}
46
{"status":"Download complete","progressDetail":{},"id":"f6fab3b798be"}
46
{"status":"Download complete","progressDetail":{},"id":"1e6ac0ffed3b"}
46
{"status":"Download complete","progressDetail":{},"id":"62ff5003ac9a"}
46
…

Metadata

Metadata

Assignees

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions