21 KiB
- title
- Remote API
- description
- API Documentation for Docker
- keywords
- API, Docker, rcli, REST, documentation
Docker Remote API
Table of Contents
1. Brief introduction
- The Remote API is replacing rcli
- Default port in the docker deamon is 4243
- The API tends to be REST, but for some complex commands, like attach or pull, the HTTP connection is hijacked to transport stdout stdin and stderr
- Since API version 1.2, the auth configuration is now handled client side, so the client has to send the authConfig as POST in /images/create and /images/<name>/pull
2. Version
The current verson of the API is 1.2 Calling /images/<name>/insert is the same as calling /v1.2/images/<name>/insert You can still call an old version of the api using /v1.0/images/<name>/insert
3. Endpoints
3.1 Containers
List containers
List containers
Example request:
GET /containers/json?all=1&before=8dfafdbc3a40 HTTP/1.1Example response:
HTTP/1.1 200 OK Content-Type: application/json [ { "Id": "8dfafdbc3a40", "Image": "base:latest", "Command": "echo 1", "Created": 1367854155, "Status": "Exit 0" }, { "Id": "9cd87474be90", "Image": "base:latest", "Command": "echo 222222", "Created": 1367854155, "Status": "Exit 0" }, { "Id": "3176a2479c92", "Image": "base:latest", "Command": "echo 3333333333333333", "Created": 1367854154, "Status": "Exit 0" }, { "Id": "4cb07b47f9fb", "Image": "base:latest", "Command": "echo 444444444444444444444444444444444", "Created": 1367854152, "Status": "Exit 0" } ]
- query all
- 1/True/true or 0/False/false, Show all containers. Only running containers are shown by default
- query limit
- Show
limitlast created containers, include non-running ones.- query since
- Show only containers created since Id, include non-running ones.
- query before
- Show only containers created before Id, include non-running ones.
- statuscode 200
- no error
- statuscode 400
- bad parameter
- statuscode 500
- server error
Create a container
Create a container
Example request:
POST /containers/create HTTP/1.1 Content-Type: application/json { "Hostname":"", "User":"", "Memory":0, "MemorySwap":0, "AttachStdin":false, "AttachStdout":true, "AttachStderr":true, "PortSpecs":null, "Tty":false, "OpenStdin":false, "StdinOnce":false, "Env":null, "Cmd":[ "date" ], "Dns":null, "Image":"base", "Volumes":{}, "VolumesFrom":"" }Example response:
HTTP/1.1 201 OK Content-Type: application/json { "Id":"e90e34656806" "Warnings":[] }
- jsonparam config
- the container's configuration
- statuscode 201
- no error
- statuscode 404
- no such container
- statuscode 406
- impossible to attach (container not running)
- statuscode 500
- server error
Inspect a container
Return low-level information on the container
idExample request:
GET /containers/4fa6e0f0c678/json HTTP/1.1Example response:
HTTP/1.1 200 OK Content-Type: application/json { "Id": "4fa6e0f0c6786287e131c3852c58a2e01cc697a68231826813597e4994f1d6e2", "Created": "2013-05-07T14:51:42.041847+02:00", "Path": "date", "Args": [], "Config": { "Hostname": "4fa6e0f0c678", "User": "", "Memory": 0, "MemorySwap": 0, "AttachStdin": false, "AttachStdout": true, "AttachStderr": true, "PortSpecs": null, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": null, "Cmd": [ "date" ], "Dns": null, "Image": "base", "Volumes": {}, "VolumesFrom": "" }, "State": { "Running": false, "Pid": 0, "ExitCode": 0, "StartedAt": "2013-05-07T14:51:42.087658+02:01360", "Ghost": false }, "Image": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc", "NetworkSettings": { "IpAddress": "", "IpPrefixLen": 0, "Gateway": "", "Bridge": "", "PortMapping": null }, "SysInitPath": "/home/kitty/go/src/github.com/dotcloud/docker/bin/docker", "ResolvConfPath": "/etc/resolv.conf", "Volumes": {} }
- statuscode 200
- no error
- statuscode 404
- no such container
- statuscode 500
- server error
Inspect changes on a container's filesystem
Inspect changes on container
id's filesystemExample request:
GET /containers/4fa6e0f0c678/changes HTTP/1.1Example response:
HTTP/1.1 200 OK Content-Type: application/json [ { "Path":"/dev", "Kind":0 }, { "Path":"/dev/kmsg", "Kind":1 }, { "Path":"/test", "Kind":1 } ]
- statuscode 200
- no error
- statuscode 404
- no such container
- statuscode 500
- server error
Export a container
Export the contents of container
idExample request:
GET /containers/4fa6e0f0c678/export HTTP/1.1Example response:
HTTP/1.1 200 OK Content-Type: application/octet-stream {{ STREAM }}
- statuscode 200
- no error
- statuscode 404
- no such container
- statuscode 500
- server error
Start a container
Start the container
idExample request:
POST /containers/e90e34656806/start HTTP/1.1Example response:
HTTP/1.1 200 OK
- statuscode 200
- no error
- statuscode 404
- no such container
- statuscode 500
- server error
Stop a contaier
Stop the container
idExample request:
POST /containers/e90e34656806/stop?t=5 HTTP/1.1Example response:
HTTP/1.1 204 OK
- query t
- number of seconds to wait before killing the container
- statuscode 204
- no error
- statuscode 404
- no such container
- statuscode 500
- server error
Restart a container
Restart the container
idExample request:
POST /containers/e90e34656806/restart?t=5 HTTP/1.1Example response:
HTTP/1.1 204 OK
- query t
- number of seconds to wait before killing the container
- statuscode 204
- no error
- statuscode 404
- no such container
- statuscode 500
- server error
Kill a container
Kill the container
idExample request:
POST /containers/e90e34656806/kill HTTP/1.1Example response:
HTTP/1.1 204 OK
- statuscode 204
- no error
- statuscode 404
- no such container
- statuscode 500
- server error
Attach to a container
Attach to the container
idExample request:
POST /containers/16253994b7c4/attach?logs=1&stream=0&stdout=1 HTTP/1.1Example response:
HTTP/1.1 200 OK Content-Type: application/vnd.docker.raw-stream {{ STREAM }}
- query logs
- 1/True/true or 0/False/false, return logs. Default false
- query stream
- 1/True/true or 0/False/false, return stream. Default false
- query stdin
- 1/True/true or 0/False/false, if stream=true, attach to stdin. Default false
- query stdout
- 1/True/true or 0/False/false, if logs=true, return stdout log, if stream=true, attach to stdout. Default false
- query stderr
- 1/True/true or 0/False/false, if logs=true, return stderr log, if stream=true, attach to stderr. Default false
- statuscode 200
- no error
- statuscode 400
- bad parameter
- statuscode 404
- no such container
- statuscode 500
- server error
Wait a container
Block until container
idstops, then returns the exit codeExample request:
POST /containers/16253994b7c4/wait HTTP/1.1Example response:
HTTP/1.1 200 OK Content-Type: application/json {"StatusCode":0}
- statuscode 200
- no error
- statuscode 404
- no such container
- statuscode 500
- server error
Remove a container
Remove the container
idfrom the filesystemExample request:
DELETE /containers/16253994b7c4?v=1 HTTP/1.1Example response:
HTTP/1.1 204 OK
- query v
- 1/True/true or 0/False/false, Remove the volumes associated to the container. Default false :statuscode 204: no error
- statuscode 400
- bad parameter :statuscode 404: no such container :statuscode 500: server error
3.2 Images
List Images
List images
formatcould be json or viz (json default)Example request:
GET /images/json?all=0 HTTP/1.1Example response:
HTTP/1.1 200 OK Content-Type: application/json [ { "Repository":"base", "Tag":"ubuntu-12.10", "Id":"b750fe79269d", "Created":1364102658 }, { "Repository":"base", "Tag":"ubuntu-quantal", "Id":"b750fe79269d", "Created":1364102658 } ]Example request:
GET /images/viz HTTP/1.1Example response:
HTTP/1.1 200 OK Content-Type: text/plain digraph docker { "d82cbacda43a" -> "074be284591f" "1496068ca813" -> "08306dc45919" "08306dc45919" -> "0e7893146ac2" "b750fe79269d" -> "1496068ca813" base -> "27cf78414709" [style=invis] "f71189fff3de" -> "9a33b36209ed" "27cf78414709" -> "b750fe79269d" "0e7893146ac2" -> "d6434d954665" "d6434d954665" -> "d82cbacda43a" base -> "e9aa60c60128" [style=invis] "074be284591f" -> "f71189fff3de" "b750fe79269d" [label="b750fe79269d\nbase",shape=box,fillcolor="paleturquoise",style="filled,rounded"]; "e9aa60c60128" [label="e9aa60c60128\nbase2",shape=box,fillcolor="paleturquoise",style="filled,rounded"]; "9a33b36209ed" [label="9a33b36209ed\ntest",shape=box,fillcolor="paleturquoise",style="filled,rounded"]; base [style=invisible] }
- query all
- 1/True/true or 0/False/false, Show all containers. Only running containers are shown by default
- statuscode 200
- no error
- statuscode 400
- bad parameter
- statuscode 500
- server error
Create an image
Create an image, either by pull it from the registry or by importing it
Example request v1.0:
POST /images/create?fromImage=base HTTP/1.1Example request v1.2:
POST /images/create?fromImage=base HTTP/1.1{{ authConfig }}
Example response v1.1:
HTTP/1.1 200 OKContent-Type: application/json
{"status":"Pulling..."} {"progress":"1/? (n/a)"} {"error":"Invalid..."} ...
Example response v1.0:
HTTP/1.1 200 OKContent-Type: application/vnd.docker.raw-stream
{{ STREAM }}
- query fromImage
- name of the image to pull
- query fromSrc
- source to import, - means stdin :query repo: repository
- query tag
- tag
- query registry
- the registry to pull from :statuscode 200: no error :statuscode 500: server error
Insert a file in a image
Insert a file from
urlin the imagenameatpathExample request:
POST /images/test/insert?path=/usr&url=myurl HTTP/1.1Example response v1.1:
HTTP/1.1 200 OKContent-Type: application/json
{"status":"Inserting..."} {"progress":"1/? (n/a)"} {"error":"Invalid..."} ...
Example response v1.0:
HTTP/1.1 200 OK{{ STREAM }}
- statuscode 200
- no error :statuscode 500: server error
Inspect an image
Return low-level information on the image
nameExample request:
GET /images/base/json HTTP/1.1Example response:
HTTP/1.1 200 OKContent-Type: application/json
{ "id":"b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc", "parent":"27cf784147099545", "created":"2013-03-23T22:24:18.818426-07:00", "container":"3d67245a8d72ecf13f33dffac9f79dcdf70f75acb84d308770391510e0c23ad0", "container_config": { "Hostname":"", "User":"", "Memory":0, "MemorySwap":0, "AttachStdin":false, "AttachStdout":false, "AttachStderr":false, "PortSpecs":null, "Tty":true, "OpenStdin":true, "StdinOnce":false, "Env":null, "Cmd": ["/bin/bash"] ,"Dns":null, "Image":"base", "Volumes":null, "VolumesFrom":"" } }
- statuscode 200
- no error
- statuscode 404
- no such image :statuscode 500: server error
Get the history of an image
Return the history of the image
nameExample request:
GET /images/base/history HTTP/1.1Example response:
HTTP/1.1 200 OKContent-Type: application/json
[
"Id":"b750fe79269d", "Created":1364102658, "CreatedBy":"/bin/bash"
}, { "Id":"27cf78414709", "Created":1364068391, "CreatedBy":"" } ]
- statuscode 200
- no error
- statuscode 404
- no such image
- statuscode 500
- server error
Push an image on the registry
Push the image
nameon the registryExample request v1.0:
POST /images/test/push HTTP/1.1Example request v1.2:
POST /images/test/push HTTP/1.1 {{ authConfig }}Example response v1.1:
HTTP/1.1 200 OKContent-Type: application/json
{"status":"Pushing..."} {"progress":"1/? (n/a)"} {"error":"Invalid..."} ...
Example response v1.0:
HTTP/1.1 200 OKContent-Type: application/vnd.docker.raw-stream
{{ STREAM }}
- query registry
- the registry you wan to push, optional
- statuscode 200
- no error :statuscode 404: no such image :statuscode 500: server error
Tag an image into a repository
Tag the image
nameinto a repositoryExample request:
POST /images/test/tag?repo=myrepo&force=0 HTTP/1.1
Example response:
HTTP/1.1 200 OK
- query repo
- The repository to tag in
- query force
- 1/True/true or 0/False/false, default false
- statuscode 200
- no error
- statuscode 400
- bad parameter
- statuscode 404
- no such image :statuscode 500: server error
Remove an image
Remove the image
namefrom the filesystemExample request:
DELETE /images/test HTTP/1.1Example response:
HTTP/1.1 204 OK
- statuscode 204
- no error :statuscode 404: no such image :statuscode 500: server error
Search images
Search for an image in the docker index
Example request:
GET /images/search?term=sshd HTTP/1.1Example response:
HTTP/1.1 200 OK Content-Type: application/json [ { "Name":"cespare/sshd", "Description":"" }, { "Name":"johnfuller/sshd", "Description":"" }, { "Name":"dhrp/mongodb-sshd", "Description":"" } ] :query term: term to search :statuscode 200: no error :statuscode 500: server error
3.3 Misc
Build an image from Dockerfile via stdin
Build an image from Dockerfile via stdin
Example request:
POST /build HTTP/1.1{{ STREAM }}
Example response:
HTTP/1.1 200 OK{{ STREAM }}
- query t
- tag to be applied to the resulting image in case of success
- statuscode 200
- no error :statuscode 500: server error
Get default username and email <deprecated with 1.2> ******************************
Get the default username and email
Example request:
GET /auth HTTP/1.1Example response:
HTTP/1.1 200 OKContent-Type: application/json
{ "username":"hannibal", "email":"hannibal@a-team.com" }
- statuscode 200
- no error
- statuscode 500
- server error
Check auth configuration (and store if if api < 1.2)
Get the default username and email
Example request:
POST /auth HTTP/1.1Content-Type: application/json
{ "username":"hannibal", "password:"xxxx", "email":"hannibal@a-team.com" }
Example response:
HTTP/1.1 200 OK
- statuscode 200
- no error
- statuscode 204
- no error
- statuscode 500
- server error
Display system-wide information
Display system-wide information
Example request:
GET /info HTTP/1.1Example response:
HTTP/1.1 200 OKContent-Type: application/json
{ "Containers":11, "Version":"0.2.2", "Images":16, "GoVersion":"go1.0.3", "Debug":false }
- statuscode 200
- no error
- statuscode 500
- server error
Show the docker version information
Show the docker version information
Example request:
GET /version HTTP/1.1Example response:
HTTP/1.1 200 OKContent-Type: application/json
{ "Version":"0.2.2", "GitCommit":"5a2a5cc+CHANGES", "MemoryLimit":true, "SwapLimit":false }
- statuscode 200
- no error
- statuscode 500
- server error
Create a new image from a container's changes
Create a new image from a container's changes
Example request:
POST /commit?container=44c004db4b17&m=message&repo=myrepo HTTP/1.1Example response:
HTTP/1.1 201 OKContent-Type: application/vnd.docker.raw-stream
{"Id":"596069db4bf5"}
- query container
- source container
- query repo
- repository
- query tag
- tag
- query m
- commit message
- query author
- author (eg. "John Hannibal Smith <hannibal@a-team.com>")
- query run
- config automatically applied when the image is run. (ex: {"Cmd": ["cat", "/world"], "PortSpecs":["22"]}) :statuscode 201: no error
- statuscode 404
- no such container :statuscode 500: server error
3. Going further
3.1 Inside 'docker run'
Here are the steps of 'docker run' :
- Create the container
- If the status code is 404, it means the image doesn't exists:
-
- Try to pull it
- Then retry to create the container
- Start the container
- If you are not in detached mode:
-
- Attach to the container, using logs=1 (to have stdout and stderr from the container's start) and stream=1
- If in detached mode or only stdin is attached:
-
- Display the container's id
3.2 Hijacking
In this first version of the API, some of the endpoints, like /attach, /pull or /push uses hijacking to transport stdin, stdout and stderr on the same socket. This might change in the future.