github.com/feiyang21687/docker@v1.5.0/docs/sources/reference/api/docker_remote_api_v1.8.md (about)

     1  page_title: Remote API v1.8
     2  page_description: API Documentation for Docker
     3  page_keywords: API, Docker, rcli, REST, documentation
     4  
     5  # Docker Remote API v1.8
     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  Status Codes:
   474  
   475  -   **204** – no error
   476  -   **404** – no such container
   477  -   **500** – server error
   478  
   479  ### Attach to a container
   480  
   481  `POST /containers/(id)/attach`
   482  
   483  Attach to the container `id`
   484  
   485  **Example request**:
   486  
   487          POST /containers/16253994b7c4/attach?logs=1&stream=0&stdout=1 HTTP/1.1
   488  
   489  **Example response**:
   490  
   491          HTTP/1.1 200 OK
   492          Content-Type: application/vnd.docker.raw-stream
   493  
   494          {{ STREAM }}
   495  
   496  Query Parameters:
   497  
   498  -   **logs** – 1/True/true or 0/False/false, return logs. Defaul
   499          false
   500  -   **stream** – 1/True/true or 0/False/false, return stream.
   501          Default false
   502  -   **stdin** – 1/True/true or 0/False/false, if stream=true, attach
   503          to stdin. Default false
   504  -   **stdout** – 1/True/true or 0/False/false, if logs=true, return
   505          stdout log, if stream=true, attach to stdout. Default false
   506  -   **stderr** – 1/True/true or 0/False/false, if logs=true, return
   507          stderr log, if stream=true, attach to stderr. Default false
   508  
   509  Status Codes:
   510  
   511  -   **200** – no error
   512  -   **400** – bad parameter
   513  -   **404** – no such container
   514  -   **500** – server error
   515  
   516      **Stream details**:
   517  
   518      When using the TTY setting is enabled in
   519      [`POST /containers/create`
   520      ](/reference/api/docker_remote_api_v1.9/#create-a-container "POST /containers/create"),
   521      the stream is the raw data from the process PTY and client's stdin.
   522      When the TTY is disabled, then the stream is multiplexed to separate
   523      stdout and stderr.
   524  
   525      The format is a **Header** and a **Payload** (frame).
   526  
   527      **HEADER**
   528  
   529      The header will contain the information on which stream write the
   530      stream (stdout or stderr). It also contain the size of the
   531      associated frame encoded on the last 4 bytes (uint32).
   532  
   533      It is encoded on the first 8 bytes like this:
   534  
   535          header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}
   536  
   537      `STREAM_TYPE` can be:
   538  
   539  -   0: stdin (will be written on stdout)
   540  -   1: stdout
   541  -   2: stderr
   542  
   543      `SIZE1, SIZE2, SIZE3, SIZE4` are the 4 bytes of
   544      the uint32 size encoded as big endian.
   545  
   546      **PAYLOAD**
   547  
   548      The payload is the raw stream.
   549  
   550      **IMPLEMENTATION**
   551  
   552      The simplest way to implement the Attach protocol is the following:
   553  
   554      1.  Read 8 bytes
   555      2.  chose stdout or stderr depending on the first byte
   556      3.  Extract the frame size from the last 4 byets
   557      4.  Read the extracted size and output it on the correct output
   558      5.  Goto 1)
   559  
   560  ### Attach to a container (websocket)
   561  
   562  `GET /containers/(id)/attach/ws`
   563  
   564  Attach to the container `id` via websocket
   565  
   566  Implements websocket protocol handshake according to [RFC 6455](http://tools.ietf.org/html/rfc6455)
   567  
   568  **Example request**
   569  
   570          GET /containers/e90e34656806/attach/ws?logs=0&stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1
   571  
   572  **Example response**
   573  
   574          {{ STREAM }}
   575  
   576  Query Parameters:
   577  
   578  -   **logs** – 1/True/true or 0/False/false, return logs. Default false
   579  -   **stream** – 1/True/true or 0/False/false, return stream.
   580          Default false
   581  -   **stdin** – 1/True/true or 0/False/false, if stream=true, attach
   582          to stdin. Default false
   583  -   **stdout** – 1/True/true or 0/False/false, if logs=true, return
   584          stdout log, if stream=true, attach to stdout. Default false
   585  -   **stderr** – 1/True/true or 0/False/false, if logs=true, return
   586          stderr log, if stream=true, attach to stderr. Default false
   587  
   588  Status Codes:
   589  
   590  -   **200** – no error
   591  -   **400** – bad parameter
   592  -   **404** – no such container
   593  -   **500** – server error
   594  
   595  ### Wait a container
   596  
   597  `POST /containers/(id)/wait`
   598  
   599  Block until container `id` stops, then returns the exit code
   600  
   601  **Example request**:
   602  
   603          POST /containers/16253994b7c4/wait HTTP/1.1
   604  
   605  **Example response**:
   606  
   607          HTTP/1.1 200 OK
   608          Content-Type: application/json
   609  
   610          {"StatusCode": 0}
   611  
   612  Status Codes:
   613  
   614  -   **200** – no error
   615  -   **404** – no such container
   616  -   **500** – server error
   617  
   618  ### Remove a container
   619  
   620  `DELETE /containers/(id)`
   621  
   622  Remove the container `id` from the filesystem
   623  
   624  **Example request**:
   625  
   626          DELETE /containers/16253994b7c4?v=1 HTTP/1.1
   627  
   628  **Example response**:
   629  
   630          HTTP/1.1 204 No Content
   631  
   632  Query Parameters:
   633  
   634  -   **v** – 1/True/true or 0/False/false, Remove the volumes
   635          associated to the container. Default false
   636  
   637  Status Codes:
   638  
   639  -   **204** – no error
   640  -   **400** – bad parameter
   641  -   **404** – no such container
   642  -   **500** – server error
   643  
   644  ### Copy files or folders from a container
   645  
   646  `POST /containers/(id)/copy`
   647  
   648  Copy files or folders of container `id`
   649  
   650  **Example request**:
   651  
   652          POST /containers/4fa6e0f0c678/copy HTTP/1.1
   653          Content-Type: application/json
   654  
   655          {
   656               "Resource": "test.txt"
   657          }
   658  
   659  **Example response**:
   660  
   661          HTTP/1.1 200 OK
   662          Content-Type: application/octet-stream
   663  
   664          {{ TAR STREAM }}
   665  
   666  Status Codes:
   667  
   668  -   **200** – no error
   669  -   **404** – no such container
   670  -   **500** – server error
   671  
   672  ## 2.2 Images
   673  
   674  ### List Images
   675  
   676  `GET /images/json`
   677  
   678  **Example request**:
   679  
   680          GET /images/json?all=0 HTTP/1.1
   681  
   682  **Example response**:
   683  
   684          HTTP/1.1 200 OK
   685          Content-Type: application/json
   686  
   687          [
   688            {
   689               "RepoTags": [
   690                 "ubuntu:12.04",
   691                 "ubuntu:precise",
   692                 "ubuntu:latest"
   693               ],
   694               "Id": "8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c",
   695               "Created": 1365714795,
   696               "Size": 131506275,
   697               "VirtualSize": 131506275
   698            },
   699            {
   700               "RepoTags": [
   701                 "ubuntu:12.10",
   702                 "ubuntu:quantal"
   703               ],
   704               "ParentId": "27cf784147099545",
   705               "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc",
   706               "Created": 1364102658,
   707               "Size": 24653,
   708               "VirtualSize": 180116135
   709            }
   710          ]
   711  
   712  ### Create an image
   713  
   714  `POST /images/create`
   715  
   716  Create an image, either by pull it from the registry or by importing i
   717  
   718  **Example request**:
   719  
   720          POST /images/create?fromImage=base HTTP/1.1
   721  
   722  **Example response**:
   723  
   724          HTTP/1.1 200 OK
   725          Content-Type: application/json
   726  
   727          {"status": "Pulling..."}
   728          {"status": "Pulling", "progress": "1 B/ 100 B", "progressDetail": {"current": 1, "total": 100}}
   729          {"error": "Invalid..."}
   730          ...
   731  
   732      When using this endpoint to pull an image from the registry, the
   733      `X-Registry-Auth` header can be used to include
   734      a base64-encoded AuthConfig object.
   735  
   736  Query Parameters:
   737  
   738  -   **fromImage** – name of the image to pull
   739  -   **fromSrc** – source to import, - means stdin
   740  -   **repo** – repository
   741  -   **tag** – tag
   742  -   **registry** – the registry to pull from
   743  
   744  Request Headers:
   745  
   746  -   **X-Registry-Auth** – base64-encoded AuthConfig object
   747  
   748  Status Codes:
   749  
   750  -   **200** – no error
   751  -   **500** – server error
   752  
   753  ### Insert a file in an image
   754  
   755  `POST /images/(name)/insert`
   756  
   757  Insert a file from `url` in the image `name` at `path`
   758  
   759  **Example request**:
   760  
   761          POST /images/test/insert?path=/usr&url=myurl HTTP/1.1
   762  
   763  **Example response**:
   764  
   765          HTTP/1.1 200 OK
   766          Content-Type: application/json
   767  
   768          {"status":"Inserting..."}
   769          {"status":"Inserting", "progress":"1/? (n/a)", "progressDetail":{"current":1}}
   770          {"error":"Invalid..."}
   771          ...
   772  
   773  Query Parameters:
   774  
   775  -	**url** – The url from where the file is taken
   776  -	**path** – The path where the file is stored
   777  
   778  Status Codes:
   779  
   780  -   **200** – no error
   781  -   **500** – server error
   782  
   783  ### Inspect an image
   784  
   785  `GET /images/(name)/json`
   786  
   787  Return low-level information on the image `name`
   788  
   789  **Example request**:
   790  
   791          GET /images/base/json HTTP/1.1
   792  
   793  **Example response**:
   794  
   795          HTTP/1.1 200 OK
   796          Content-Type: application/json
   797  
   798          {
   799               "id":"b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc",
   800               "parent":"27cf784147099545",
   801               "created":"2013-03-23T22:24:18.818426-07:00",
   802               "container":"3d67245a8d72ecf13f33dffac9f79dcdf70f75acb84d308770391510e0c23ad0",
   803               "container_config":
   804                       {
   805                               "Hostname":"",
   806                               "User":"",
   807                               "Memory":0,
   808                               "MemorySwap":0,
   809                               "AttachStdin":false,
   810                               "AttachStdout":false,
   811                               "AttachStderr":false,
   812                               "PortSpecs":null,
   813                               "Tty":true,
   814                               "OpenStdin":true,
   815                               "StdinOnce":false,
   816                               "Env":null,
   817                               "Cmd": ["/bin/bash"],
   818                               "Dns":null,
   819                               "Image":"base",
   820                               "Volumes":null,
   821                               "VolumesFrom":"",
   822                               "WorkingDir":""
   823                       },
   824               "Size": 6824592
   825          }
   826  
   827  Status Codes:
   828  
   829  -   **200** – no error
   830  -   **404** – no such image
   831  -   **500** – server error
   832  
   833  ### Get the history of an image
   834  
   835  `GET /images/(name)/history`
   836  
   837  Return the history of the image `name`
   838  
   839  **Example request**:
   840  
   841          GET /images/base/history HTTP/1.1
   842  
   843  **Example response**:
   844  
   845          HTTP/1.1 200 OK
   846          Content-Type: application/json
   847  
   848          [
   849               {
   850                       "Id": "b750fe79269d",
   851                       "Created": 1364102658,
   852                       "CreatedBy": "/bin/bash"
   853               },
   854               {
   855                       "Id": "27cf78414709",
   856                       "Created": 1364068391,
   857                       "CreatedBy": ""
   858               }
   859          ]
   860  
   861  Status Codes:
   862  
   863  -   **200** – no error
   864  -   **404** – no such image
   865  -   **500** – server error
   866  
   867  ### Push an image on the registry
   868  
   869  `POST /images/(name)/push`
   870  
   871  Push the image `name` on the registry
   872  
   873  **Example request**:
   874  
   875          POST /images/test/push HTTP/1.1
   876  
   877  **Example response**:
   878  
   879          HTTP/1.1 200 OK
   880          Content-Type: application/json
   881  
   882          {"status": "Pushing..."}
   883          {"status": "Pushing", "progress": "1/? (n/a)", "progressDetail": {"current": 1}}}
   884          {"error": "Invalid..."}
   885          ...
   886  
   887      Request Headers:
   888  
   889       
   890  
   891  -   **X-Registry-Auth** – include a base64-encoded AuthConfig
   892          object.
   893  
   894  Status Codes:
   895  
   896  -   **200** – no error
   897  -   **404** – no such image
   898  -   **500** – server error
   899  
   900  ### Tag an image into a repository
   901  
   902  `POST /images/(name)/tag`
   903  
   904  Tag the image `name` into a repository
   905  
   906  **Example request**:
   907  
   908          POST /images/test/tag?repo=myrepo&force=0&tag=v42 HTTP/1.1
   909  
   910  **Example response**:
   911  
   912          HTTP/1.1 201 OK
   913  
   914  Query Parameters:
   915  
   916  -   **repo** – The repository to tag in
   917  -   **force** – 1/True/true or 0/False/false, default false
   918  -   **tag** - The new tag name
   919  
   920  Status Codes:
   921  
   922  -   **201** – no error
   923  -   **400** – bad parameter
   924  -   **404** – no such image
   925  -   **409** – conflict
   926  -   **500** – server error
   927  
   928  ### Remove an image
   929  
   930  `DELETE /images/(name)`
   931  
   932  Remove the image `name` from the filesystem
   933  
   934  **Example request**:
   935  
   936          DELETE /images/test HTTP/1.1
   937  
   938  **Example response**:
   939  
   940          HTTP/1.1 200 OK
   941          Content-type: application/json
   942  
   943          [
   944           {"Untagged": "3e2f21a89f"},
   945           {"Deleted": "3e2f21a89f"},
   946           {"Deleted": "53b4f83ac9"}
   947          ]
   948  
   949  Status Codes:
   950  
   951  -   **200** – no error
   952  -   **404** – no such image
   953  -   **409** – conflict
   954  -   **500** – server error
   955  
   956  ### Search images
   957  
   958  `GET /images/search`
   959  
   960  Search for an image on [Docker Hub](https://hub.docker.com).
   961  
   962  > **Note**:
   963  > The response keys have changed from API v1.6 to reflect the JSON
   964  > sent by the registry server to the docker daemon's request.
   965  
   966  **Example request**:
   967  
   968          GET /images/search?term=sshd HTTP/1.1
   969  
   970  **Example response**:
   971  
   972          HTTP/1.1 200 OK
   973          Content-Type: application/json
   974  
   975          [
   976                  {
   977                      "description": "",
   978                      "is_official": false,
   979                      "is_trusted": false,
   980                      "name": "wma55/u1210sshd",
   981                      "star_count": 0
   982                  },
   983                  {
   984                      "description": "",
   985                      "is_official": false,
   986                      "is_trusted": false,
   987                      "name": "jdswinbank/sshd",
   988                      "star_count": 0
   989                  },
   990                  {
   991                      "description": "",
   992                      "is_official": false,
   993                      "is_trusted": false,
   994                      "name": "vgauthier/sshd",
   995                      "star_count": 0
   996                  }
   997          ...
   998          ]
   999  
  1000  Query Parameters:
  1001  
  1002  -   **term** – term to search
  1003  
  1004  Status Codes:
  1005  
  1006  -   **200** – no error
  1007  -   **500** – server error
  1008  
  1009  ## 2.3 Misc
  1010  
  1011  ### Build an image from Dockerfile via stdin
  1012  
  1013  `POST /build`
  1014  
  1015  Build an image from Dockerfile via stdin
  1016  
  1017  **Example request**:
  1018  
  1019          POST /build HTTP/1.1
  1020  
  1021          {{ TAR STREAM }}
  1022  
  1023  **Example response**:
  1024  
  1025          HTTP/1.1 200 OK
  1026          Content-Type: application/json
  1027  
  1028          {"stream": "Step 1..."}
  1029          {"stream": "..."}
  1030          {"error": "Error...", "errorDetail": {"code": 123, "message": "Error..."}}
  1031  
  1032      The stream must be a tar archive compressed with one of the
  1033      following algorithms: identity (no compression), gzip, bzip2, xz.
  1034  
  1035      The archive must include a file called `Dockerfile`
  1036      at its root. It may include any number of other files,
  1037      which will be accessible in the build context (See the [*ADD build
  1038      command*](/reference/builder/#dockerbuilder)).
  1039  
  1040  Query Parameters:
  1041  
  1042  -   **t** – repository name (and optionally a tag) to be applied to
  1043      the resulting image in case of success
  1044  -   **remote** – build source URI (git or HTTPS/HTTP)
  1045  -   **q** – suppress verbose build output
  1046  -   **nocache** – do not use the cache when building the image
  1047  
  1048      Request Headers:
  1049  
  1050       
  1051  
  1052  -   **Content-type** – should be set to
  1053          `"application/tar"`.
  1054  -   **X-Registry-Auth** – base64-encoded AuthConfig 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  
  1157  **Example response**:
  1158  
  1159          HTTP/1.1 201 OK
  1160              Content-Type: application/vnd.docker.raw-stream
  1161  
  1162          {"Id": "596069db4bf5"}
  1163  
  1164  Query Parameters:
  1165  
  1166  -   **container** – source container
  1167  -   **repo** – repository
  1168  -   **tag** – tag
  1169  -   **m** – commit message
  1170  -   **author** – author (e.g., "John Hannibal Smith
  1171          <[hannibal@a-team.com](mailto:hannibal%40a-team.com)>")
  1172  -   **run** – config automatically applied when the image is run.
  1173          (ex: {"Cmd": ["cat", "/world"], "PortSpecs":["22"]})
  1174  
  1175  Status Codes:
  1176  
  1177  -   **201** – no error
  1178  -   **404** – no such container
  1179  -   **500** – server error
  1180  
  1181  ### Monitor Docker's events
  1182  
  1183  `GET /events`
  1184  
  1185  Get events from docker, either in real time via streaming,
  1186  or via polling (using since).
  1187  
  1188  Docker containers will report the following events:
  1189  
  1190      create, destroy, die, export, kill, pause, restart, start, stop, unpause
  1191  
  1192  and Docker images will report:
  1193  
  1194      untag, delete
  1195  
  1196  **Example request**:
  1197  
  1198          GET /events?since=1374067924
  1199  
  1200  **Example response**:
  1201  
  1202          HTTP/1.1 200 OK
  1203          Content-Type: application/json
  1204  
  1205          {"status": "create", "id": "dfdf82bd3881","from": "base:latest", "time":1374067924}
  1206          {"status": "start", "id": "dfdf82bd3881","from": "base:latest", "time":1374067924}
  1207          {"status": "stop", "id": "dfdf82bd3881","from": "base:latest", "time":1374067966}
  1208          {"status": "destroy", "id": "dfdf82bd3881","from": "base:latest", "time":1374067970}
  1209  
  1210  Query Parameters:
  1211  
  1212  -   **since** – timestamp used for polling
  1213  
  1214  Status Codes:
  1215  
  1216  -   **200** – no error
  1217  -   **500** – server error
  1218  
  1219  ### Get a tarball containing all images and tags in a repository
  1220  
  1221  `GET /images/(name)/get`
  1222  
  1223  Get a tarball containing all images and metadata for the repository
  1224  specified by `name`.
  1225  See the [image tarball format](#image-tarball-format) for more details.
  1226  
  1227  **Example request**
  1228  
  1229          GET /images/ubuntu/get
  1230  
  1231  **Example response**:
  1232  
  1233          HTTP/1.1 200 OK
  1234          Content-Type: application/x-tar
  1235  
  1236          Binary data stream
  1237  
  1238  Status Codes:
  1239  
  1240  -   **200** – no error
  1241  -   **500** – server error
  1242  
  1243  ### Load a tarball with a set of images and tags into docker
  1244  
  1245  `POST /images/load`
  1246  
  1247  Load a set of images and tags into the docker repository.
  1248  
  1249  See the [image tarball format](#image-tarball-format) for more details.
  1250  
  1251  **Example request**
  1252  
  1253          POST /images/load
  1254  
  1255          Tarball in body
  1256  
  1257  **Example response**:
  1258  
  1259          HTTP/1.1 200 OK
  1260  
  1261  Status Codes:
  1262  
  1263  -   **200** – no error
  1264  -   **500** – server error
  1265  
  1266  ### Image tarball format
  1267  
  1268  An image tarball contains one directory per image layer (named using its long ID),
  1269  each containing three files:
  1270  
  1271  1. `VERSION`: currently `1.0` - the file format version
  1272  2. `json`: detailed layer information, similar to `docker inspect layer_id`
  1273  3. `layer.tar`: A tarfile containing the filesystem changes in this layer
  1274  
  1275  The `layer.tar` file will contain `aufs` style `.wh..wh.aufs` files and directories
  1276  for storing attribute changes and deletions.
  1277  
  1278  If the tarball defines a repository, there will also be a `repositories` file at
  1279  the root that contains a list of repository and tag names mapped to layer IDs.
  1280  
  1281  ```
  1282  {"hello-world":
  1283      {"latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1"}
  1284  }
  1285  ```
  1286  
  1287  # 3. Going further
  1288  
  1289  ## 3.1 Inside `docker run`
  1290  
  1291  Here are the steps of `docker run`:
  1292  
  1293   - Create the container
  1294  
  1295   - If the status code is 404, it means the image doesn't exist:
  1296          - Try to pull it
  1297          - Then retry to create the container
  1298  
  1299   - Start the container
  1300  
  1301   - If you are not in detached mode:
  1302          - Attach to the container, using logs=1 (to have stdout and
  1303              stderr from the container's start) and stream=1
  1304  
  1305   - If in detached mode or only stdin is attached:
  1306          - Display the container's id
  1307  
  1308  ## 3.2 Hijacking
  1309  
  1310  In this version of the API, /attach, uses hijacking to transport stdin,
  1311  stdout and stderr on the same socket. This might change in the future.
  1312  
  1313  ## 3.3 CORS Requests
  1314  
  1315  To enable cross origin requests to the remote api add the flag
  1316  "--api-enable-cors" when running docker in daemon mode.
  1317  
  1318      $ docker -d -H="192.168.1.9:2375" --api-enable-cors