github.com/eikeon/docker@v1.5.0-rc4/docs/sources/reference/api/docker_remote_api_v1.9.md (about)

     1  page_title: Remote API v1.9
     2  page_description: API Documentation for Docker
     3  page_keywords: API, Docker, rcli, REST, documentation
     4  
     5  # Docker Remote API v1.9
     6  
     7  # 1. Brief introduction
     8  
     9   - The Remote API has replaced rcli
    10   - The daemon listens on `unix:///var/run/docker.sock` but you can bind
    11     Docker to another host/port or a Unix socket.
    12   - The API tends to be REST, but for some complex commands, like `attach`
    13     or `pull`, the HTTP connection is hijacked to transport `stdout, stdin`
    14     and `stderr`
    15  
    16  # 2. Endpoints
    17  
    18  ## 2.1 Containers
    19  
    20  ### List containers
    21  
    22  `GET /containers/json`
    23  
    24  List containers.
    25  
    26  **Example request**:
    27  
    28          GET /containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1
    29  
    30  **Example response**:
    31  
    32          HTTP/1.1 200 OK
    33          Content-Type: application/json
    34  
    35          [
    36               {
    37                       "Id": "8dfafdbc3a40",
    38                       "Image": "base:latest",
    39                       "Command": "echo 1",
    40                       "Created": 1367854155,
    41                       "Status": "Exit 0",
    42                       "Ports": [{"PrivatePort": 2222, "PublicPort": 3333, "Type": "tcp"}],
    43                       "SizeRw": 12288,
    44                       "SizeRootFs": 0
    45               },
    46               {
    47                       "Id": "9cd87474be90",
    48                       "Image": "base:latest",
    49                       "Command": "echo 222222",
    50                       "Created": 1367854155,
    51                       "Status": "Exit 0",
    52                       "Ports": [],
    53                       "SizeRw": 12288,
    54                       "SizeRootFs": 0
    55               },
    56               {
    57                       "Id": "3176a2479c92",
    58                       "Image": "base:latest",
    59                       "Command": "echo 3333333333333333",
    60                       "Created": 1367854154,
    61                       "Status": "Exit 0",
    62                       "Ports":[],
    63                       "SizeRw":12288,
    64                       "SizeRootFs":0
    65               },
    66               {
    67                       "Id": "4cb07b47f9fb",
    68                       "Image": "base:latest",
    69                       "Command": "echo 444444444444444444444444444444444",
    70                       "Created": 1367854152,
    71                       "Status": "Exit 0",
    72                       "Ports": [],
    73                       "SizeRw": 12288,
    74                       "SizeRootFs": 0
    75               }
    76          ]
    77  
    78  Query Parameters:
    79  
    80       
    81  
    82  -   **all** – 1/True/true or 0/False/false, Show all containers.
    83      Only running containers are shown by default (i.e., this defaults to false)
    84  -   **limit** – Show `limit` last created containers, include non-running ones.
    85  -   **since** – Show only containers created since Id, include non-running ones.
    86  -   **before** – Show only containers created before Id, include non-running ones.
    87  -   **size** – 1/True/true or 0/False/false, Show the containers sizes
    88  
    89  Status Codes:
    90  
    91  -   **200** – no error
    92  -   **400** – bad parameter
    93  -   **500** – server error
    94  
    95  ### Create a container
    96  
    97  `POST /containers/create`
    98  
    99  Create a container
   100  
   101  **Example request**:
   102  
   103          POST /containers/create HTTP/1.1
   104          Content-Type: application/json
   105  
   106          {
   107               "Hostname":"",
   108               "User":"",
   109               "Memory":0,
   110               "MemorySwap":0,
   111               "CpuShares":0,
   112               "AttachStdin":false,
   113               "AttachStdout":true,
   114               "AttachStderr":true,
   115               "PortSpecs":null,
   116               "Tty":false,
   117               "OpenStdin":false,
   118               "StdinOnce":false,
   119               "Env":null,
   120               "Cmd":[
   121                       "date"
   122               ],
   123               "Dns":null,
   124               "Image":"base",
   125               "Volumes":{
   126                       "/tmp": {}
   127               },
   128               "VolumesFrom":"",
   129               "WorkingDir":"",
   130               "ExposedPorts":{
   131                       "22/tcp": {}
   132               }
   133          }
   134  
   135  **Example response**:
   136  
   137          HTTP/1.1 201 Created
   138          Content-Type: application/json
   139  
   140          {
   141               "Id":"e90e34656806"
   142               "Warnings":[]
   143          }
   144  
   145  Json Parameters:
   146  
   147       
   148  
   149  -   **Hostname** – Container host name
   150  -   **User** – Username or UID
   151  -   **Memory** – Memory Limit in bytes
   152  -   **CpuShares** – CPU shares (relative weight)
   153  -   **AttachStdin** – 1/True/true or 0/False/false, attach to
   154          standard input. Default false
   155  -   **AttachStdout** – 1/True/true or 0/False/false, attach to
   156          standard output. Default false
   157  -   **AttachStderr** – 1/True/true or 0/False/false, attach to
   158          standard error. Default false
   159  -   **Tty** – 1/True/true or 0/False/false, allocate a pseudo-tty.
   160          Default false
   161  -   **OpenStdin** – 1/True/true or 0/False/false, keep stdin open
   162          even if not attached. Default false
   163  
   164  Query Parameters:
   165  
   166       
   167  
   168  -   **name** – Assign the specified name to the container. Mus
   169          match `/?[a-zA-Z0-9_-]+`.
   170  
   171  Status Codes:
   172  
   173  -   **201** – no error
   174  -   **404** – no such container
   175  -   **406** – impossible to attach (container not running)
   176  -   **500** – server error
   177  
   178  ### Inspect a container
   179  
   180  `GET /containers/(id)/json`
   181  
   182  Return low-level information on the container `id`
   183  
   184  **Example request**:
   185  
   186          GET /containers/4fa6e0f0c678/json HTTP/1.1
   187  
   188  **Example response**:
   189  
   190          HTTP/1.1 200 OK
   191          Content-Type: application/json
   192  
   193          {
   194                       "Id": "4fa6e0f0c6786287e131c3852c58a2e01cc697a68231826813597e4994f1d6e2",
   195                       "Created": "2013-05-07T14:51:42.041847+02:00",
   196                       "Path": "date",
   197                       "Args": [],
   198                       "Config": {
   199                               "Hostname": "4fa6e0f0c678",
   200                               "User": "",
   201                               "Memory": 0,
   202                               "MemorySwap": 0,
   203                               "AttachStdin": false,
   204                               "AttachStdout": true,
   205                               "AttachStderr": true,
   206                               "PortSpecs": null,
   207                               "Tty": false,
   208                               "OpenStdin": false,
   209                               "StdinOnce": false,
   210                               "Env": null,
   211                               "Cmd": [
   212                                       "date"
   213                               ],
   214                               "Dns": null,
   215                               "Image": "base",
   216                               "Volumes": {},
   217                               "VolumesFrom": "",
   218                               "WorkingDir": ""
   219                       },
   220                       "State": {
   221                               "Running": false,
   222                               "Pid": 0,
   223                               "ExitCode": 0,
   224                               "StartedAt": "2013-05-07T14:51:42.087658+02:01360",
   225                               "Ghost": false
   226                       },
   227                       "Image": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc",
   228                       "NetworkSettings": {
   229                               "IpAddress": "",
   230                               "IpPrefixLen": 0,
   231                               "Gateway": "",
   232                               "Bridge": "",
   233                               "PortMapping": null
   234                       },
   235                       "SysInitPath": "/home/kitty/go/src/github.com/docker/docker/bin/docker",
   236                       "ResolvConfPath": "/etc/resolv.conf",
   237                       "Volumes": {},
   238                       "HostConfig": {
   239                           "Binds": null,
   240                           "ContainerIDFile": "",
   241                           "LxcConf": [],
   242                           "Privileged": false,
   243                           "PortBindings": {
   244                              "80/tcp": [
   245                                  {
   246                                      "HostIp": "0.0.0.0",
   247                                      "HostPort": "49153"
   248                                  }
   249                              ]
   250                           },
   251                           "Links": null,
   252                           "PublishAllPorts": false
   253                       }
   254          }
   255  
   256  Status Codes:
   257  
   258  -   **200** – no error
   259  -   **404** – no such container
   260  -   **500** – server error
   261  
   262  ### List processes running inside a container
   263  
   264  `GET /containers/(id)/top`
   265  
   266  List processes running inside the container `id`
   267  
   268  **Example request**:
   269  
   270          GET /containers/4fa6e0f0c678/top HTTP/1.1
   271  
   272  **Example response**:
   273  
   274          HTTP/1.1 200 OK
   275          Content-Type: application/json
   276  
   277          {
   278               "Titles": [
   279                       "USER",
   280                       "PID",
   281                       "%CPU",
   282                       "%MEM",
   283                       "VSZ",
   284                       "RSS",
   285                       "TTY",
   286                       "STAT",
   287                       "START",
   288                       "TIME",
   289                       "COMMAND"
   290                       ],
   291               "Processes": [
   292                       ["root","20147","0.0","0.1","18060","1864","pts/4","S","10:06","0:00","bash"],
   293                       ["root","20271","0.0","0.0","4312","352","pts/4","S+","10:07","0:00","sleep","10"]
   294               ]
   295          }
   296  
   297  Query Parameters:
   298  
   299  -   **ps_args** – ps arguments to use (e.g., aux)
   300  
   301  Status Codes:
   302  
   303  -   **200** – no error
   304  -   **404** – no such container
   305  -   **500** – server error
   306  
   307  ### Inspect changes on a container's filesystem
   308  
   309  `GET /containers/(id)/changes`
   310  
   311  Inspect changes on container `id`'s filesystem
   312  
   313  **Example request**:
   314  
   315          GET /containers/4fa6e0f0c678/changes HTTP/1.1
   316  
   317  **Example response**:
   318  
   319          HTTP/1.1 200 OK
   320          Content-Type: application/json
   321  
   322          [
   323               {
   324                       "Path": "/dev",
   325                       "Kind": 0
   326               },
   327               {
   328                       "Path": "/dev/kmsg",
   329                       "Kind": 1
   330               },
   331               {
   332                       "Path": "/test",
   333                       "Kind": 1
   334               }
   335          ]
   336  
   337  Status Codes:
   338  
   339  -   **200** – no error
   340  -   **404** – no such container
   341  -   **500** – server error
   342  
   343  ### Export a container
   344  
   345  `GET /containers/(id)/export`
   346  
   347  Export the contents of container `id`
   348  
   349  **Example request**:
   350  
   351          GET /containers/4fa6e0f0c678/export HTTP/1.1
   352  
   353  **Example response**:
   354  
   355          HTTP/1.1 200 OK
   356          Content-Type: application/octet-stream
   357  
   358          {{ TAR STREAM }}
   359  
   360  Status Codes:
   361  
   362  -   **200** – no error
   363  -   **404** – no such container
   364  -   **500** – server error
   365  
   366  ### Start a container
   367  
   368  `POST /containers/(id)/start`
   369  
   370  Start the container `id`
   371  
   372  **Example request**:
   373  
   374          POST /containers/(id)/start HTTP/1.1
   375          Content-Type: application/json
   376  
   377          {
   378               "Binds":["/tmp:/tmp"],
   379               "LxcConf":[{"Key":"lxc.utsname","Value":"docker"}],
   380               "PortBindings":{ "22/tcp": [{ "HostPort": "11022" }] },
   381               "PublishAllPorts":false,
   382               "Privileged":false
   383          }
   384  
   385  **Example response**:
   386  
   387          HTTP/1.1 204 No Content
   388          Content-Type: text/plain
   389  
   390  Json Parameters:
   391  
   392       
   393  
   394  -   **Binds** – Create a bind mount to a directory or file with
   395          [host-path]:[container-path]:[rw|ro]. If a directory
   396          "container-path" is missing, then docker creates a new volume.
   397  -   **LxcConf** – Map of custom lxc options
   398  -   **PortBindings** – Expose ports from the container, optionally
   399          publishing them via the HostPort flag
   400  -   **PublishAllPorts** – 1/True/true or 0/False/false, publish all
   401          exposed ports to the host interfaces. Default false
   402  -   **Privileged** – 1/True/true or 0/False/false, give extended
   403          privileges to this container. Default false
   404  
   405  Status Codes:
   406  
   407  -   **204** – no error
   408  -   **404** – no such container
   409  -   **500** – server error
   410  
   411  ### Stop a container
   412  
   413  `POST /containers/(id)/stop`
   414  
   415  Stop the container `id`
   416  
   417  **Example request**:
   418  
   419          POST /containers/e90e34656806/stop?t=5 HTTP/1.1
   420  
   421  **Example response**:
   422  
   423          HTTP/1.1 204 OK
   424  
   425  Query Parameters:
   426  
   427  -   **t** – number of seconds to wait before killing the container
   428  
   429  Status Codes:
   430  
   431  -   **204** – no error
   432  -   **404** – no such container
   433  -   **500** – server error
   434  
   435  ### Restart a container
   436  
   437  `POST /containers/(id)/restart`
   438  
   439  Restart the container `id`
   440  
   441  **Example request**:
   442  
   443          POST /containers/e90e34656806/restart?t=5 HTTP/1.1
   444  
   445  **Example response**:
   446  
   447          HTTP/1.1 204 No Content
   448  
   449  Query Parameters:
   450  
   451  -   **t** – number of seconds to wait before killing the container
   452  
   453  Status Codes:
   454  
   455  -   **204** – no error
   456  -   **404** – no such container
   457  -   **500** – server error
   458  
   459  ### Kill a container
   460  
   461  `POST /containers/(id)/kill`
   462  
   463  Kill the container `id`
   464  
   465  **Example request**:
   466  
   467          POST /containers/e90e34656806/kill HTTP/1.1
   468  
   469  **Example response**:
   470  
   471          HTTP/1.1 204 No Content
   472  
   473  Query Parameters
   474  
   475  -   **signal** - Signal to send to the container: integer or string like "SIGINT".
   476      When not set, SIGKILL is assumed and the call will wait for the container to exit.
   477  
   478  Status Codes:
   479  
   480  -   **204** – no error
   481  -   **404** – no such container
   482  -   **500** – server error
   483  
   484  ### Attach to a container
   485  
   486  `POST /containers/(id)/attach`
   487  
   488  Attach to the container `id`
   489  
   490  **Example request**:
   491  
   492          POST /containers/16253994b7c4/attach?logs=1&stream=0&stdout=1 HTTP/1.1
   493  
   494  **Example response**:
   495  
   496          HTTP/1.1 200 OK
   497          Content-Type: application/vnd.docker.raw-stream
   498  
   499          {{ STREAM }}
   500  
   501  Query Parameters:
   502  
   503  -   **logs** – 1/True/true or 0/False/false, return logs. Defaul
   504          false
   505  -   **stream** – 1/True/true or 0/False/false, return stream.
   506          Default false
   507  -   **stdin** – 1/True/true or 0/False/false, if stream=true, attach
   508          to stdin. Default false
   509  -   **stdout** – 1/True/true or 0/False/false, if logs=true, return
   510          stdout log, if stream=true, attach to stdout. Default false
   511  -   **stderr** – 1/True/true or 0/False/false, if logs=true, return
   512          stderr log, if stream=true, attach to stderr. Default false
   513  
   514  Status Codes:
   515  
   516  -   **200** – no error
   517  -   **400** – bad parameter
   518  -   **404** – no such container
   519  -   **500** – server error
   520  
   521      **Stream details**:
   522  
   523      When using the TTY setting is enabled in
   524      [`POST /containers/create`](#create-a-container), the
   525      stream is the raw data from the process PTY and client's stdin. When
   526      the TTY is disabled, then the stream is multiplexed to separate
   527      stdout and stderr.
   528  
   529      The format is a **Header** and a **Payload** (frame).
   530  
   531      **HEADER**
   532  
   533      The header will contain the information on which stream write the
   534      stream (stdout or stderr). It also contain the size of the
   535      associated frame encoded on the last 4 bytes (uint32).
   536  
   537      It is encoded on the first 8 bytes like this:
   538  
   539          header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}
   540  
   541      `STREAM_TYPE` can be:
   542  
   543  -   0: stdin (will be written on stdout)
   544  -   1: stdout
   545  -   2: stderr
   546  
   547      `SIZE1, SIZE2, SIZE3, SIZE4` are the 4 bytes of
   548      the uint32 size encoded as big endian.
   549  
   550      **PAYLOAD**
   551  
   552      The payload is the raw stream.
   553  
   554      **IMPLEMENTATION**
   555  
   556      The simplest way to implement the Attach protocol is the following:
   557  
   558      1.  Read 8 bytes
   559      2.  chose stdout or stderr depending on the first byte
   560      3.  Extract the frame size from the last 4 byets
   561      4.  Read the extracted size and output it on the correct output
   562      5.  Goto 1)
   563  
   564  ### Attach to a container (websocket)
   565  
   566  `GET /containers/(id)/attach/ws`
   567  
   568  Attach to the container `id` via websocket
   569  
   570  Implements websocket protocol handshake according to [RFC 6455](http://tools.ietf.org/html/rfc6455)
   571  
   572  **Example request**
   573  
   574          GET /containers/e90e34656806/attach/ws?logs=0&stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1
   575  
   576  **Example response**
   577  
   578          {{ STREAM }}
   579  
   580  Query Parameters:
   581  
   582  -   **logs** – 1/True/true or 0/False/false, return logs. Default false
   583  -   **stream** – 1/True/true or 0/False/false, return stream.
   584          Default false
   585  -   **stdin** – 1/True/true or 0/False/false, if stream=true, attach
   586          to stdin. Default false
   587  -   **stdout** – 1/True/true or 0/False/false, if logs=true, return
   588          stdout log, if stream=true, attach to stdout. Default false
   589  -   **stderr** – 1/True/true or 0/False/false, if logs=true, return
   590          stderr log, if stream=true, attach to stderr. Default false
   591  
   592  Status Codes:
   593  
   594  -   **200** – no error
   595  -   **400** – bad parameter
   596  -   **404** – no such container
   597  -   **500** – server error
   598  
   599  ### Wait a container
   600  
   601  `POST /containers/(id)/wait`
   602  
   603  Block until container `id` stops, then returns the exit code
   604  
   605  **Example request**:
   606  
   607          POST /containers/16253994b7c4/wait HTTP/1.1
   608  
   609  **Example response**:
   610  
   611          HTTP/1.1 200 OK
   612          Content-Type: application/json
   613  
   614          {"StatusCode": 0}
   615  
   616  Status Codes:
   617  
   618  -   **200** – no error
   619  -   **404** – no such container
   620  -   **500** – server error
   621  
   622  ### Remove a container
   623  
   624  `DELETE /containers/(id)`
   625  
   626  Remove the container `id` from the filesystem
   627  
   628  **Example request**:
   629  
   630          DELETE /containers/16253994b7c4?v=1 HTTP/1.1
   631  
   632  **Example response**:
   633  
   634          HTTP/1.1 204 No Content
   635  
   636  Query Parameters:
   637  
   638  -   **v** – 1/True/true or 0/False/false, Remove the volumes
   639          associated to the container. Default false
   640  
   641  Status Codes:
   642  
   643  -   **204** – no error
   644  -   **400** – bad parameter
   645  -   **404** – no such container
   646  -   **500** – server error
   647  
   648  ### Copy files or folders from a container
   649  
   650  `POST /containers/(id)/copy`
   651  
   652  Copy files or folders of container `id`
   653  
   654  **Example request**:
   655  
   656          POST /containers/4fa6e0f0c678/copy HTTP/1.1
   657          Content-Type: application/json
   658  
   659          {
   660               "Resource": "test.txt"
   661          }
   662  
   663  **Example response**:
   664  
   665          HTTP/1.1 200 OK
   666          Content-Type: application/octet-stream
   667  
   668          {{ TAR STREAM }}
   669  
   670  Status Codes:
   671  
   672  -   **200** – no error
   673  -   **404** – no such container
   674  -   **500** – server error
   675  
   676  ## 2.2 Images
   677  
   678  ### List Images
   679  
   680  `GET /images/json`
   681  
   682  **Example request**:
   683  
   684          GET /images/json?all=0 HTTP/1.1
   685  
   686  **Example response**:
   687  
   688          HTTP/1.1 200 OK
   689          Content-Type: application/json
   690  
   691          [
   692            {
   693               "RepoTags": [
   694                 "ubuntu:12.04",
   695                 "ubuntu:precise",
   696                 "ubuntu:latest"
   697               ],
   698               "Id": "8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c",
   699               "Created": 1365714795,
   700               "Size": 131506275,
   701               "VirtualSize": 131506275
   702            },
   703            {
   704               "RepoTags": [
   705                 "ubuntu:12.10",
   706                 "ubuntu:quantal"
   707               ],
   708               "ParentId": "27cf784147099545",
   709               "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc",
   710               "Created": 1364102658,
   711               "Size": 24653,
   712               "VirtualSize": 180116135
   713            }
   714          ]
   715  
   716  ### Create an image
   717  
   718  `POST /images/create`
   719  
   720  Create an image, either by pull it from the registry or by importing i
   721  
   722  **Example request**:
   723  
   724          POST /images/create?fromImage=base HTTP/1.1
   725  
   726  **Example response**:
   727  
   728          HTTP/1.1 200 OK
   729          Content-Type: application/json
   730  
   731          {"status": "Pulling..."}
   732          {"status": "Pulling", "progress": "1 B/ 100 B", "progressDetail": {"current": 1, "total": 100}}
   733          {"error": "Invalid..."}
   734          ...
   735  
   736      When using this endpoint to pull an image from the registry, the
   737      `X-Registry-Auth` header can be used to include
   738      a base64-encoded AuthConfig object.
   739  
   740  Query Parameters:
   741  
   742  -   **fromImage** – name of the image to pull
   743  -   **fromSrc** – source to import, - means stdin
   744  -   **repo** – repository
   745  -   **tag** – tag
   746  -   **registry** – the registry to pull from
   747  
   748  Request Headers:
   749  
   750  -   **X-Registry-Auth** – base64-encoded AuthConfig object
   751  
   752  Status Codes:
   753  
   754  -   **200** – no error
   755  -   **500** – server error
   756  
   757  ### Insert a file in an image
   758  
   759  `POST /images/(name)/insert`
   760  
   761  Insert a file from `url` in the image `name` at `path`
   762  
   763  **Example request**:
   764  
   765          POST /images/test/insert?path=/usr&url=myurl HTTP/1.1
   766  
   767  **Example response**:
   768  
   769          HTTP/1.1 200 OK
   770          Content-Type: application/json
   771  
   772          {"status":"Inserting..."}
   773          {"status":"Inserting", "progress":"1/? (n/a)", "progressDetail":{"current":1}}
   774          {"error":"Invalid..."}
   775          ...
   776  
   777  Query Parameters:
   778  
   779  -	**url** – The url from where the file is taken
   780  -	**path** – The path where the file is stored
   781  
   782  Status Codes:
   783  
   784  -   **200** – no error
   785  -   **500** – server error
   786  
   787  ### Inspect an image
   788  
   789  `GET /images/(name)/json`
   790  
   791  Return low-level information on the image `name`
   792  
   793  **Example request**:
   794  
   795          GET /images/base/json HTTP/1.1
   796  
   797  **Example response**:
   798  
   799          HTTP/1.1 200 OK
   800          Content-Type: application/json
   801  
   802          {
   803               "id":"b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc",
   804               "parent":"27cf784147099545",
   805               "created":"2013-03-23T22:24:18.818426-07:00",
   806               "container":"3d67245a8d72ecf13f33dffac9f79dcdf70f75acb84d308770391510e0c23ad0",
   807               "container_config":
   808                       {
   809                               "Hostname":"",
   810                               "User":"",
   811                               "Memory":0,
   812                               "MemorySwap":0,
   813                               "AttachStdin":false,
   814                               "AttachStdout":false,
   815                               "AttachStderr":false,
   816                               "PortSpecs":null,
   817                               "Tty":true,
   818                               "OpenStdin":true,
   819                               "StdinOnce":false,
   820                               "Env":null,
   821                               "Cmd": ["/bin/bash"],
   822                               "Dns":null,
   823                               "Image":"base",
   824                               "Volumes":null,
   825                               "VolumesFrom":"",
   826                               "WorkingDir":""
   827                       },
   828               "Size": 6824592
   829          }
   830  
   831  Status Codes:
   832  
   833  -   **200** – no error
   834  -   **404** – no such image
   835  -   **500** – server error
   836  
   837  ### Get the history of an image
   838  
   839  `GET /images/(name)/history`
   840  
   841  Return the history of the image `name`
   842  
   843  **Example request**:
   844  
   845          GET /images/base/history HTTP/1.1
   846  
   847  **Example response**:
   848  
   849          HTTP/1.1 200 OK
   850          Content-Type: application/json
   851  
   852          [
   853               {
   854                       "Id": "b750fe79269d",
   855                       "Created": 1364102658,
   856                       "CreatedBy": "/bin/bash"
   857               },
   858               {
   859                       "Id": "27cf78414709",
   860                       "Created": 1364068391,
   861                       "CreatedBy": ""
   862               }
   863          ]
   864  
   865  Status Codes:
   866  
   867  -   **200** – no error
   868  -   **404** – no such image
   869  -   **500** – server error
   870  
   871  ### Push an image on the registry
   872  
   873  `POST /images/(name)/push`
   874  
   875  Push the image `name` on the registry
   876  
   877  **Example request**:
   878  
   879          POST /images/test/push HTTP/1.1
   880  
   881  **Example response**:
   882  
   883          HTTP/1.1 200 OK
   884          Content-Type: application/json
   885  
   886          {"status": "Pushing..."}
   887          {"status": "Pushing", "progress": "1/? (n/a)", "progressDetail": {"current": 1}}}
   888          {"error": "Invalid..."}
   889          ...
   890  
   891      Request Headers:
   892  
   893       
   894  
   895  -   **X-Registry-Auth** – include a base64-encoded AuthConfig
   896          object.
   897  
   898  Status Codes:
   899  
   900  -   **200** – no error
   901  -   **404** – no such image
   902  -   **500** – server error
   903  
   904  ### Tag an image into a repository
   905  
   906  `POST /images/(name)/tag`
   907  
   908  Tag the image `name` into a repository
   909  
   910  **Example request**:
   911  
   912          POST /images/test/tag?repo=myrepo&force=0&tag=v42 HTTP/1.1
   913  
   914  **Example response**:
   915  
   916          HTTP/1.1 201 OK
   917  
   918  Query Parameters:
   919  
   920  -   **repo** – The repository to tag in
   921  -   **force** – 1/True/true or 0/False/false, default false
   922  -   **tag** - The new tag name
   923  
   924  Status Codes:
   925  
   926  -   **201** – no error
   927  -   **400** – bad parameter
   928  -   **404** – no such image
   929  -   **409** – conflict
   930  -   **500** – server error
   931  
   932  ### Remove an image
   933  
   934  `DELETE /images/(name*)
   935  :   Remove the image `name` from the filesystem
   936  
   937  **Example request**:
   938  
   939          DELETE /images/test HTTP/1.1
   940  
   941  **Example response**:
   942  
   943          HTTP/1.1 200 OK
   944          Content-type: application/json
   945  
   946          [
   947           {"Untagged": "3e2f21a89f"},
   948           {"Deleted": "3e2f21a89f"},
   949           {"Deleted": "53b4f83ac9"}
   950          ]
   951  
   952  Status Codes:
   953  
   954  -   **200** – no error
   955  -   **404** – no such image
   956  -   **409** – conflict
   957  -   **500** – server error
   958  
   959  ### Search images
   960  
   961  `GET /images/search`
   962  
   963  Search for an image on [Docker Hub](https://hub.docker.com).
   964  
   965  > **Note**:
   966  > The response keys have changed from API v1.6 to reflect the JSON
   967  > sent by the registry server to the docker daemon's request.
   968  
   969  **Example request**:
   970  
   971          GET /images/search?term=sshd HTTP/1.1
   972  
   973  **Example response**:
   974  
   975          HTTP/1.1 200 OK
   976          Content-Type: application/json
   977  
   978          [
   979                  {
   980                      "description": "",
   981                      "is_official": false,
   982                      "is_trusted": false,
   983                      "name": "wma55/u1210sshd",
   984                      "star_count": 0
   985                  },
   986                  {
   987                      "description": "",
   988                      "is_official": false,
   989                      "is_trusted": false,
   990                      "name": "jdswinbank/sshd",
   991                      "star_count": 0
   992                  },
   993                  {
   994                      "description": "",
   995                      "is_official": false,
   996                      "is_trusted": false,
   997                      "name": "vgauthier/sshd",
   998                      "star_count": 0
   999                  }
  1000          ...
  1001          ]
  1002  
  1003  Query Parameters:
  1004  
  1005  -   **term** – term to search
  1006  
  1007  Status Codes:
  1008  
  1009  -   **200** – no error
  1010  -   **500** – server error
  1011  
  1012  ## 2.3 Misc
  1013  
  1014  ### Build an image from Dockerfile
  1015  
  1016  `POST /build`
  1017  
  1018  Build an image from Dockerfile using a POST body.
  1019  
  1020  **Example request**:
  1021  
  1022          POST /build HTTP/1.1
  1023  
  1024          {{ TAR STREAM }}
  1025  
  1026  **Example response**:
  1027  
  1028          HTTP/1.1 200 OK
  1029          Content-Type: application/json
  1030  
  1031          {"stream": "Step 1..."}
  1032          {"stream": "..."}
  1033          {"error": "Error...", "errorDetail": {"code": 123, "message": "Error..."}}
  1034  
  1035      The stream must be a tar archive compressed with one of the
  1036      following algorithms: identity (no compression), gzip, bzip2, xz.
  1037  
  1038      The archive must include a file called `Dockerfile`
  1039   at its root. It may include any number of other files,
  1040      which will be accessible in the build context (See the [*ADD build
  1041      command*](/reference/builder/#add)).
  1042  
  1043  Query Parameters:
  1044  
  1045  -   **t** – repository name (and optionally a tag) to be applied to
  1046      the resulting image in case of success
  1047  -   **q** – suppress verbose build output
  1048  -   **nocache** – do not use the cache when building the image
  1049  -   **rm** – Remove intermediate containers after a successful build
  1050  
  1051      Request Headers:
  1052  
  1053  -   **Content-type** – should be set to `"application/tar"`.
  1054  -   **X-Registry-Config** – base64-encoded ConfigFile objec
  1055  
  1056  Status Codes:
  1057  
  1058  -   **200** – no error
  1059  -   **500** – server error
  1060  
  1061  ### Check auth configuration
  1062  
  1063  `POST /auth`
  1064  
  1065  Get the default username and email
  1066  
  1067  **Example request**:
  1068  
  1069          POST /auth HTTP/1.1
  1070          Content-Type: application/json
  1071  
  1072          {
  1073               "username":" hannibal",
  1074               "password: "xxxx",
  1075               "email": "hannibal@a-team.com",
  1076               "serveraddress": "https://index.docker.io/v1/"
  1077          }
  1078  
  1079  **Example response**:
  1080  
  1081          HTTP/1.1 200 OK
  1082          Content-Type: text/plain
  1083  
  1084  Status Codes:
  1085  
  1086  -   **200** – no error
  1087  -   **204** – no error
  1088  -   **500** – server error
  1089  
  1090  ### Display system-wide information
  1091  
  1092  `GET /info`
  1093  
  1094  Display system-wide information
  1095  
  1096  **Example request**:
  1097  
  1098          GET /info HTTP/1.1
  1099  
  1100  **Example response**:
  1101  
  1102          HTTP/1.1 200 OK
  1103          Content-Type: application/json
  1104  
  1105          {
  1106               "Containers":11,
  1107               "Images":16,
  1108               "Debug":false,
  1109               "NFd": 11,
  1110               "NGoroutines":21,
  1111               "MemoryLimit":true,
  1112               "SwapLimit":false,
  1113               "IPv4Forwarding":true
  1114          }
  1115  
  1116  Status Codes:
  1117  
  1118  -   **200** – no error
  1119  -   **500** – server error
  1120  
  1121  ### Show the docker version information
  1122  
  1123  `GET /version`
  1124  
  1125  Show the docker version information
  1126  
  1127  **Example request**:
  1128  
  1129          GET /version HTTP/1.1
  1130  
  1131  **Example response**:
  1132  
  1133          HTTP/1.1 200 OK
  1134          Content-Type: application/json
  1135  
  1136          {
  1137               "Version":"0.2.2",
  1138               "GitCommit":"5a2a5cc+CHANGES",
  1139               "GoVersion":"go1.0.3"
  1140          }
  1141  
  1142  Status Codes:
  1143  
  1144  -   **200** – no error
  1145  -   **500** – server error
  1146  
  1147  ### Create a new image from a container's changes
  1148  
  1149  `POST /commit`
  1150  
  1151  Create a new image from a container's changes
  1152  
  1153  **Example request**:
  1154  
  1155          POST /commit?container=44c004db4b17&m=message&repo=myrepo HTTP/1.1
  1156          Content-Type: application/json
  1157  
  1158          {
  1159               "Hostname":"",
  1160               "User":"",
  1161               "Memory":0,
  1162               "MemorySwap":0,
  1163               "AttachStdin":false,
  1164               "AttachStdout":true,
  1165               "AttachStderr":true,
  1166               "PortSpecs":null,
  1167               "Tty":false,
  1168               "OpenStdin":false,
  1169               "StdinOnce":false,
  1170               "Env":null,
  1171               "Cmd":[
  1172                       "date"
  1173               ],
  1174               "Volumes":{
  1175                       "/tmp": {}
  1176               },
  1177               "WorkingDir":"",
  1178               "DisableNetwork": false,
  1179               "ExposedPorts":{
  1180                       "22/tcp": {}
  1181               }
  1182          }
  1183  
  1184  **Example response**:
  1185  
  1186          HTTP/1.1 201 Created
  1187          Content-Type: application/vnd.docker.raw-stream
  1188  
  1189          {"Id": "596069db4bf5"}
  1190  
  1191  Json Parameters:
  1192  
  1193  -  **config** - the container's configuration
  1194  
  1195  Query Parameters:
  1196  
  1197  -   **container** – source container
  1198  -   **repo** – repository
  1199  -   **tag** – tag
  1200  -   **m** – commit message
  1201  -   **author** – author (e.g., "John Hannibal Smith
  1202      <[hannibal@a-team.com](mailto:hannibal%40a-team.com)>")
  1203  
  1204  Status Codes:
  1205  
  1206  -   **201** – no error
  1207  -   **404** – no such container
  1208  -   **500** – server error
  1209  
  1210  ### Monitor Docker's events
  1211  
  1212  `GET /events`
  1213  
  1214  Get events from docker, either in real time via streaming, or via
  1215  polling (using since).
  1216  
  1217  Docker containers will report the following events:
  1218  
  1219      create, destroy, die, export, kill, pause, restart, start, stop, unpause
  1220  
  1221  and Docker images will report:
  1222  
  1223      untag, delete
  1224  
  1225  **Example request**:
  1226  
  1227          GET /events?since=1374067924
  1228  
  1229  **Example response**:
  1230  
  1231          HTTP/1.1 200 OK
  1232          Content-Type: application/json
  1233  
  1234          {"status": "create", "id": "dfdf82bd3881","from": "base:latest", "time":1374067924}
  1235          {"status": "start", "id": "dfdf82bd3881","from": "base:latest", "time":1374067924}
  1236          {"status": "stop", "id": "dfdf82bd3881","from": "base:latest", "time":1374067966}
  1237          {"status": "destroy", "id": "dfdf82bd3881","from": "base:latest", "time":1374067970}
  1238  
  1239  Query Parameters:
  1240  
  1241  -   **since** – timestamp used for polling
  1242  
  1243  Status Codes:
  1244  
  1245  -   **200** – no error
  1246  -   **500** – server error
  1247  
  1248  ### Get a tarball containing all images and tags in a repository
  1249  
  1250  `GET /images/(name)/get`
  1251  
  1252  Get a tarball containing all images and metadata for the repository specified by `name`.
  1253  
  1254  See the [image tarball format](#image-tarball-format) for more details.
  1255  
  1256  **Example request**
  1257  
  1258          GET /images/ubuntu/get
  1259  
  1260  **Example response**:
  1261  
  1262          HTTP/1.1 200 OK
  1263          Content-Type: application/x-tar
  1264  
  1265          Binary data stream
  1266  
  1267  Status Codes:
  1268  
  1269  -   **200** – no error
  1270  -   **500** – server error
  1271  
  1272  ### Load a tarball with a set of images and tags into docker
  1273  
  1274  `POST /images/load`
  1275  
  1276  Load a set of images and tags into the docker repository.
  1277  
  1278  See the [image tarball format](#image-tarball-format) for more details.
  1279  
  1280  **Example request**
  1281  
  1282          POST /images/load
  1283  
  1284          Tarball in body
  1285  
  1286  **Example response**:
  1287  
  1288          HTTP/1.1 200 OK
  1289  
  1290  Status Codes:
  1291  
  1292  -   **200** – no error
  1293  -   **500** – server error
  1294  
  1295  ### Image tarball format
  1296  
  1297  An image tarball contains one directory per image layer (named using its long ID),
  1298  each containing three files:
  1299  
  1300  1. `VERSION`: currently `1.0` - the file format version
  1301  2. `json`: detailed layer information, similar to `docker inspect layer_id`
  1302  3. `layer.tar`: A tarfile containing the filesystem changes in this layer
  1303  
  1304  The `layer.tar` file will contain `aufs` style `.wh..wh.aufs` files and directories
  1305  for storing attribute changes and deletions.
  1306  
  1307  If the tarball defines a repository, there will also be a `repositories` file at
  1308  the root that contains a list of repository and tag names mapped to layer IDs.
  1309  
  1310  ```
  1311  {"hello-world":
  1312      {"latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1"}
  1313  }
  1314  ```
  1315  
  1316  # 3. Going further
  1317  
  1318  ## 3.1 Inside `docker run`
  1319  
  1320  Here are the steps of `docker run` :
  1321  
  1322   - Create the container
  1323  
  1324   - If the status code is 404, it means the image doesn't exist:
  1325  
  1326  - Try to pull it
  1327  -   Then retry to create the container
  1328  
  1329   - Start the container
  1330  
  1331   - If you are not in detached mode:
  1332  
  1333  - Attach to the container, using logs=1 (to have stdout and
  1334  - stderr from the container's start) and stream=1
  1335  
  1336   - If in detached mode or only stdin is attached:
  1337  
  1338  - Display the container's id
  1339  
  1340  ## 3.2 Hijacking
  1341  
  1342  In this version of the API, /attach, uses hijacking to transport stdin,
  1343  stdout and stderr on the same socket. This might change in the future.
  1344  
  1345  ## 3.3 CORS Requests
  1346  
  1347  To enable cross origin requests to the remote api add the flag
  1348  "--api-enable-cors" when running docker in daemon mode.
  1349  
  1350      $ docker -d -H="192.168.1.9:2375" --api-enable-cors