github.com/tompao/docker@v1.9.1/docs/reference/api/docker_remote_api_v1.16.md (about)

     1  <!--[metadata]>
     2  +++
     3  title = "Remote API v1.16"
     4  description = "API Documentation for Docker"
     5  keywords = ["API, Docker, rcli, REST,  documentation"]
     6  [menu.main]
     7  parent = "smn_remoteapi"
     8  weight = 5
     9  +++
    10  <![end-metadata]-->
    11  
    12  # Docker Remote API v1.16
    13  
    14  ## 1. Brief introduction
    15  
    16   - The Remote API has replaced `rcli`.
    17   - The daemon listens on `unix:///var/run/docker.sock` but you can
    18     [Bind Docker to another host/port or a Unix socket](../../userguide/basics.md#bind-docker-to-another-host-port-or-a-unix-socket).
    19   - The API tends to be REST, but for some complex commands, like `attach`
    20     or `pull`, the HTTP connection is hijacked to transport `STDOUT`,
    21     `STDIN` and `STDERR`.
    22  
    23  # 2. Endpoints
    24  
    25  ## 2.1 Containers
    26  
    27  ### List containers
    28  
    29  `GET /containers/json`
    30  
    31  List containers
    32  
    33  **Example request**:
    34  
    35          GET /containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1
    36  
    37  **Example response**:
    38  
    39          HTTP/1.1 200 OK
    40          Content-Type: application/json
    41  
    42          [
    43               {
    44                       "Id": "8dfafdbc3a40",
    45                       "Names":["/boring_feynman"],
    46                       "Image": "ubuntu:latest",
    47                       "Command": "echo 1",
    48                       "Created": 1367854155,
    49                       "Status": "Exit 0",
    50                       "Ports": [{"PrivatePort": 2222, "PublicPort": 3333, "Type": "tcp"}],
    51                       "SizeRw": 12288,
    52                       "SizeRootFs": 0
    53               },
    54               {
    55                       "Id": "9cd87474be90",
    56                       "Names":["/coolName"],
    57                       "Image": "ubuntu:latest",
    58                       "Command": "echo 222222",
    59                       "Created": 1367854155,
    60                       "Status": "Exit 0",
    61                       "Ports": [],
    62                       "SizeRw": 12288,
    63                       "SizeRootFs": 0
    64               },
    65               {
    66                       "Id": "3176a2479c92",
    67                       "Names":["/sleep_dog"],
    68                       "Image": "ubuntu:latest",
    69                       "Command": "echo 3333333333333333",
    70                       "Created": 1367854154,
    71                       "Status": "Exit 0",
    72                       "Ports":[],
    73                       "SizeRw":12288,
    74                       "SizeRootFs":0
    75               },
    76               {
    77                       "Id": "4cb07b47f9fb",
    78                       "Names":["/running_cat"],
    79                       "Image": "ubuntu:latest",
    80                       "Command": "echo 444444444444444444444444444444444",
    81                       "Created": 1367854152,
    82                       "Status": "Exit 0",
    83                       "Ports": [],
    84                       "SizeRw": 12288,
    85                       "SizeRootFs": 0
    86               }
    87          ]
    88  
    89  Query Parameters:
    90  
    91  -   **all** – 1/True/true or 0/False/false, Show all containers.
    92          Only running containers are shown by default (i.e., this defaults to false)
    93  -   **limit** – Show `limit` last created
    94          containers, include non-running ones.
    95  -   **since** – Show only containers created since Id, include
    96          non-running ones.
    97  -   **before** – Show only containers created before Id, include
    98          non-running ones.
    99  -   **size** – 1/True/true or 0/False/false, Show the containers
   100          sizes
   101  -   **filters** - a json encoded value of the filters (a map[string][]string) to process on the containers list. Available filters:
   102    -   exited=&lt;int&gt; -- containers with exit code of &lt;int&gt;
   103    -   status=(restarting|running|paused|exited)
   104  
   105  Status Codes:
   106  
   107  -   **200** – no error
   108  -   **400** – bad parameter
   109  -   **500** – server error
   110  
   111  ### Create a container
   112  
   113  `POST /containers/create`
   114  
   115  Create a container
   116  
   117  **Example request**:
   118  
   119          POST /containers/create HTTP/1.1
   120          Content-Type: application/json
   121  
   122          {
   123               "Hostname": "",
   124               "Domainname": "",
   125               "User": "",
   126               "Memory": 0,
   127               "MemorySwap": 0,
   128               "CpuShares": 512,
   129               "Cpuset": "0,1",
   130               "AttachStdin": false,
   131               "AttachStdout": true,
   132               "AttachStderr": true,
   133               "Tty": false,
   134               "OpenStdin": false,
   135               "StdinOnce": false,
   136               "Env": null,
   137               "Cmd": [
   138                       "date"
   139               ],
   140               "Entrypoint": "",
   141               "Image": "ubuntu",
   142               "Volumes": {
   143                       "/tmp": {}
   144               },
   145               "WorkingDir": "",
   146               "NetworkDisabled": false,
   147               "MacAddress": "12:34:56:78:9a:bc",
   148               "ExposedPorts": {
   149                       "22/tcp": {}
   150               },
   151               "SecurityOpts": [""],
   152               "HostConfig": {
   153                 "Binds": ["/tmp:/tmp"],
   154                 "Links": ["redis3:redis"],
   155                 "LxcConf": {"lxc.utsname":"docker"},
   156                 "PortBindings": { "22/tcp": [{ "HostPort": "11022" }] },
   157                 "PublishAllPorts": false,
   158                 "Privileged": false,
   159                 "Dns": ["8.8.8.8"],
   160                 "DnsSearch": [""],
   161                 "ExtraHosts": null,
   162                 "VolumesFrom": ["parent", "other:ro"],
   163                 "CapAdd": ["NET_ADMIN"],
   164                 "CapDrop": ["MKNOD"],
   165                 "RestartPolicy": { "Name": "", "MaximumRetryCount": 0 },
   166                 "NetworkMode": "bridge",
   167                 "Devices": []
   168              }
   169          }
   170  
   171  **Example response**:
   172  
   173          HTTP/1.1 201 Created
   174          Content-Type: application/json
   175  
   176          {
   177               "Id":"e90e34656806"
   178               "Warnings":[]
   179          }
   180  
   181  Json Parameters:
   182  
   183  -   **Hostname** - A string value containing the desired hostname to use for the
   184        container.
   185  -   **Domainname** - A string value containing the desired domain name to use
   186        for the container.
   187  -   **User** - A string value containing the user to use inside the container.
   188  -   **Memory** - Memory limit in bytes.
   189  -   **MemorySwap**- Total memory usage (memory + swap); set `-1` to disable swap.
   190  -   **CpuShares** - An integer value containing the CPU Shares for container
   191        (ie. the relative weight vs other containers).
   192      **CpuSet** - String value containing the cgroups Cpuset to use.
   193  -   **AttachStdin** - Boolean value, attaches to stdin.
   194  -   **AttachStdout** - Boolean value, attaches to stdout.
   195  -   **AttachStderr** - Boolean value, attaches to stderr.
   196  -   **Tty** - Boolean value, Attach standard streams to a tty, including stdin if it is not closed.
   197  -   **OpenStdin** - Boolean value, opens stdin,
   198  -   **StdinOnce** - Boolean value, close stdin after the 1 attached client disconnects.
   199  -   **Env** - A list of environment variables in the form of `VAR=value`
   200  -   **Cmd** - Command to run specified as a string or an array of strings.
   201  -   **Entrypoint** - Set the entrypoint for the container a string or an array
   202        of strings
   203  -   **Image** - String value containing the image name to use for the container
   204  -   **Volumes** – An object mapping mountpoint paths (strings) inside the
   205          container to empty objects.
   206  -   **WorkingDir** - A string value containing the working dir for commands to
   207        run in.
   208  -   **NetworkDisabled** - Boolean value, when true disables networking for the
   209        container
   210  -   **ExposedPorts** - An object mapping ports to an empty object in the form of:
   211        `"ExposedPorts": { "<port>/<tcp|udp>: {}" }`
   212  -   **SecurityOpts**: A list of string values to customize labels for MLS
   213        systems, such as SELinux.
   214  -   **HostConfig**
   215    -   **Binds** – A list of volume bindings for this container.  Each volume
   216            binding is a string of the form `container_path` (to create a new
   217            volume for the container), `host_path:container_path` (to bind-mount
   218            a host path into the container), or `host_path:container_path:ro`
   219            (to make the bind-mount read-only inside the container).
   220    -   **Links** - A list of links for the container.  Each link entry should be
   221          in the form of "container_name:alias".
   222    -   **LxcConf** - LXC specific configurations.  These configurations will only
   223          work when using the `lxc` execution driver.
   224    -   **PortBindings** - A map of exposed container ports and the host port they
   225          should map to. It should be specified in the form
   226          `{ <port>/<protocol>: [{ "HostPort": "<port>" }] }`
   227          Take note that `port` is specified as a string and not an integer value.
   228    -   **PublishAllPorts** - Allocates a random host port for all of a container's
   229          exposed ports. Specified as a boolean value.
   230    -   **Privileged** - Gives the container full access to the host.  Specified as
   231          a boolean value.
   232    -   **Dns** - A list of dns servers for the container to use.
   233    -   **DnsSearch** - A list of DNS search domains
   234    -   **ExtraHosts** - A list of hostnames/IP mappings to be added to the
   235        container's `/etc/hosts` file. Specified in the form `["hostname:IP"]`.
   236    -   **VolumesFrom** - A list of volumes to inherit from another container.
   237          Specified in the form `<container name>[:<ro|rw>]`
   238    -   **CapAdd** - A list of kernel capabilities to add to the container.
   239    -   **Capdrop** - A list of kernel capabilities to drop from the container.
   240    -   **RestartPolicy** – The behavior to apply when the container exits.  The
   241            value is an object with a `Name` property of either `"always"` to
   242            always restart or `"on-failure"` to restart only when the container
   243            exit code is non-zero.  If `on-failure` is used, `MaximumRetryCount`
   244            controls the number of times to retry before giving up.
   245            The default is not to restart. (optional)
   246            An ever increasing delay (double the previous delay, starting at 100mS)
   247            is added before each restart to prevent flooding the server.
   248    -   **NetworkMode** - Sets the networking mode for the container. Supported
   249          values are: `bridge`, `host`, and `container:<name|id>`
   250    -   **Devices** - A list of devices to add to the container specified in the
   251          form
   252          `{ "PathOnHost": "/dev/deviceName", "PathInContainer": "/dev/deviceName", "CgroupPermissions": "mrw"}`
   253  
   254  Query Parameters:
   255  
   256  -   **name** – Assign the specified name to the container. Must
   257      match `/?[a-zA-Z0-9_-]+`.
   258  
   259  Status Codes:
   260  
   261  -   **201** – no error
   262  -   **404** – no such container
   263  -   **406** – impossible to attach (container not running)
   264  -   **500** – server error
   265  
   266  ### Inspect a container
   267  
   268  `GET /containers/(id)/json`
   269  
   270  Return low-level information on the container `id`
   271  
   272  
   273  **Example request**:
   274  
   275          GET /containers/4fa6e0f0c678/json HTTP/1.1
   276  
   277  **Example response**:
   278  
   279          HTTP/1.1 200 OK
   280          Content-Type: application/json
   281  
   282          {
   283                       "Id": "4fa6e0f0c6786287e131c3852c58a2e01cc697a68231826813597e4994f1d6e2",
   284                       "Created": "2013-05-07T14:51:42.041847+02:00",
   285                       "Path": "date",
   286                       "Args": [],
   287                       "Config": {
   288                               "Hostname": "4fa6e0f0c678",
   289                               "User": "",
   290                               "Memory": 0,
   291                               "MemorySwap": 0,
   292                               "AttachStdin": false,
   293                               "AttachStdout": true,
   294                               "AttachStderr": true,
   295                               "PortSpecs": null,
   296                               "Tty": false,
   297                               "OpenStdin": false,
   298                               "StdinOnce": false,
   299                               "Env": null,
   300                               "Cmd": [
   301                                       "date"
   302                               ],
   303                               "Dns": null,
   304                               "Image": "ubuntu",
   305                               "Volumes": {},
   306                               "VolumesFrom": "",
   307                               "WorkingDir": ""
   308                       },
   309                       "State": {
   310                               "Running": false,
   311                               "Pid": 0,
   312                               "ExitCode": 0,
   313                               "StartedAt": "2013-05-07T14:51:42.087658+02:01360",
   314                               "Ghost": false
   315                       },
   316                       "Image": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc",
   317                       "NetworkSettings": {
   318                               "IpAddress": "",
   319                               "IpPrefixLen": 0,
   320                               "Gateway": "",
   321                               "Bridge": "",
   322                               "PortMapping": null
   323                       },
   324                       "SysInitPath": "/home/kitty/go/src/github.com/docker/docker/bin/docker",
   325                       "ResolvConfPath": "/etc/resolv.conf",
   326                       "Volumes": {},
   327                       "HostConfig": {
   328                           "Binds": null,
   329                           "ContainerIDFile": "",
   330                           "LxcConf": [],
   331                           "Privileged": false,
   332                           "PortBindings": {
   333                              "80/tcp": [
   334                                  {
   335                                      "HostIp": "0.0.0.0",
   336                                      "HostPort": "49153"
   337                                  }
   338                              ]
   339                           },
   340                           "Links": ["/name:alias"],
   341                           "PublishAllPorts": false,
   342                           "CapAdd": ["NET_ADMIN"],
   343                           "CapDrop": ["MKNOD"]
   344                       }
   345          }
   346  
   347  Status Codes:
   348  
   349  -   **200** – no error
   350  -   **404** – no such container
   351  -   **500** – server error
   352  
   353  ### List processes running inside a container
   354  
   355  `GET /containers/(id)/top`
   356  
   357  List processes running inside the container `id`
   358  
   359  **Example request**:
   360  
   361          GET /containers/4fa6e0f0c678/top HTTP/1.1
   362  
   363  **Example response**:
   364  
   365          HTTP/1.1 200 OK
   366          Content-Type: application/json
   367  
   368          {
   369               "Titles": [
   370                       "USER",
   371                       "PID",
   372                       "%CPU",
   373                       "%MEM",
   374                       "VSZ",
   375                       "RSS",
   376                       "TTY",
   377                       "STAT",
   378                       "START",
   379                       "TIME",
   380                       "COMMAND"
   381                       ],
   382               "Processes": [
   383                       ["root","20147","0.0","0.1","18060","1864","pts/4","S","10:06","0:00","bash"],
   384                       ["root","20271","0.0","0.0","4312","352","pts/4","S+","10:07","0:00","sleep","10"]
   385               ]
   386          }
   387  
   388  Query Parameters:
   389  
   390  -   **ps_args** – ps arguments to use (e.g., aux)
   391  
   392  Status Codes:
   393  
   394  -   **200** – no error
   395  -   **404** – no such container
   396  -   **500** – server error
   397  
   398  ### Get container logs
   399  
   400  `GET /containers/(id)/logs`
   401  
   402  Get stdout and stderr logs from the container ``id``
   403  
   404  **Example request**:
   405  
   406         GET /containers/4fa6e0f0c678/logs?stderr=1&stdout=1&timestamps=1&follow=1&tail=10 HTTP/1.1
   407  
   408  **Example response**:
   409  
   410         HTTP/1.1 200 OK
   411         Content-Type: application/vnd.docker.raw-stream
   412  
   413         {{ STREAM }}
   414  
   415  Query Parameters:
   416  
   417  -   **follow** – 1/True/true or 0/False/false, return stream. Default false
   418  -   **stdout** – 1/True/true or 0/False/false, show stdout log. Default false
   419  -   **stderr** – 1/True/true or 0/False/false, show stderr log. Default false
   420  -   **timestamps** – 1/True/true or 0/False/false, print timestamps for
   421          every log line. Default false
   422  -   **tail** – Output specified number of lines at the end of logs: `all` or `<number>`. Default all
   423  
   424  Status Codes:
   425  
   426  -   **200** – no error
   427  -   **404** – no such container
   428  -   **500** – server error
   429  
   430  ### Inspect changes on a container's filesystem
   431  
   432  `GET /containers/(id)/changes`
   433  
   434  Inspect changes on container `id`'s filesystem
   435  
   436  **Example request**:
   437  
   438          GET /containers/4fa6e0f0c678/changes HTTP/1.1
   439  
   440  **Example response**:
   441  
   442          HTTP/1.1 200 OK
   443          Content-Type: application/json
   444  
   445          [
   446               {
   447                       "Path": "/dev",
   448                       "Kind": 0
   449               },
   450               {
   451                       "Path": "/dev/kmsg",
   452                       "Kind": 1
   453               },
   454               {
   455                       "Path": "/test",
   456                       "Kind": 1
   457               }
   458          ]
   459  
   460  Status Codes:
   461  
   462  -   **200** – no error
   463  -   **404** – no such container
   464  -   **500** – server error
   465  
   466  ### Export a container
   467  
   468  `GET /containers/(id)/export`
   469  
   470  Export the contents of container `id`
   471  
   472  **Example request**:
   473  
   474          GET /containers/4fa6e0f0c678/export HTTP/1.1
   475  
   476  **Example response**:
   477  
   478          HTTP/1.1 200 OK
   479          Content-Type: application/octet-stream
   480  
   481          {{ TAR STREAM }}
   482  
   483  Status Codes:
   484  
   485  -   **200** – no error
   486  -   **404** – no such container
   487  -   **500** – server error
   488  
   489  ### Resize a container TTY
   490  
   491  `POST /containers/(id)/resize?h=<height>&w=<width>`
   492  
   493  Resize the TTY for container with  `id`. The container must be restarted for the resize to take effect.
   494  
   495  **Example request**:
   496  
   497          POST /containers/4fa6e0f0c678/resize?h=40&w=80 HTTP/1.1
   498  
   499  **Example response**:
   500  
   501          HTTP/1.1 200 OK
   502          Content-Length: 0
   503          Content-Type: text/plain; charset=utf-8
   504  
   505  Status Codes:
   506  
   507  -   **200** – no error
   508  -   **404** – No such container
   509  -   **500** – Cannot resize container
   510  
   511  ### Start a container
   512  
   513  `POST /containers/(id)/start`
   514  
   515  Start the container `id`
   516  
   517  > **Note**:
   518  > For backwards compatibility, this endpoint accepts a `HostConfig` as JSON-encoded request body.
   519  > See [create a container](#create-a-container) for details.
   520  
   521  **Example request**:
   522  
   523          POST /containers/(id)/start HTTP/1.1
   524  
   525  **Example response**:
   526  
   527          HTTP/1.1 204 No Content
   528  
   529  Status Codes:
   530  
   531  -   **204** – no error
   532  -   **304** – container already started
   533  -   **404** – no such container
   534  -   **500** – server error
   535  
   536  ### Stop a container
   537  
   538  `POST /containers/(id)/stop`
   539  
   540  Stop the container `id`
   541  
   542  **Example request**:
   543  
   544          POST /containers/e90e34656806/stop?t=5 HTTP/1.1
   545  
   546  **Example response**:
   547  
   548          HTTP/1.1 204 No Content
   549  
   550  Query Parameters:
   551  
   552  -   **t** – number of seconds to wait before killing the container
   553  
   554  Status Codes:
   555  
   556  -   **204** – no error
   557  -   **304** – container already stopped
   558  -   **404** – no such container
   559  -   **500** – server error
   560  
   561  ### Restart a container
   562  
   563  `POST /containers/(id)/restart`
   564  
   565  Restart the container `id`
   566  
   567  **Example request**:
   568  
   569          POST /containers/e90e34656806/restart?t=5 HTTP/1.1
   570  
   571  **Example response**:
   572  
   573          HTTP/1.1 204 No Content
   574  
   575  Query Parameters:
   576  
   577  -   **t** – number of seconds to wait before killing the container
   578  
   579  Status Codes:
   580  
   581  -   **204** – no error
   582  -   **404** – no such container
   583  -   **500** – server error
   584  
   585  ### Kill a container
   586  
   587  `POST /containers/(id)/kill`
   588  
   589  Kill the container `id`
   590  
   591  **Example request**:
   592  
   593          POST /containers/e90e34656806/kill HTTP/1.1
   594  
   595  **Example response**:
   596  
   597          HTTP/1.1 204 No Content
   598  
   599  Query Parameters
   600  
   601  -   **signal** - Signal to send to the container: integer or string like "SIGINT".
   602          When not set, SIGKILL is assumed and the call will waits for the container to exit.
   603  
   604  Status Codes:
   605  
   606  -   **204** – no error
   607  -   **404** – no such container
   608  -   **500** – server error
   609  
   610  ### Pause a container
   611  
   612  `POST /containers/(id)/pause`
   613  
   614  Pause the container `id`
   615  
   616  **Example request**:
   617  
   618          POST /containers/e90e34656806/pause HTTP/1.1
   619  
   620  **Example response**:
   621  
   622          HTTP/1.1 204 No Content
   623  
   624  Status Codes:
   625  
   626  -   **204** – no error
   627  -   **404** – no such container
   628  -   **500** – server error
   629  
   630  ### Unpause a container
   631  
   632  `POST /containers/(id)/unpause`
   633  
   634  Unpause the container `id`
   635  
   636  **Example request**:
   637  
   638          POST /containers/e90e34656806/unpause HTTP/1.1
   639  
   640  **Example response**:
   641  
   642          HTTP/1.1 204 No Content
   643  
   644  Status Codes:
   645  
   646  -   **204** – no error
   647  -   **404** – no such container
   648  -   **500** – server error
   649  
   650  ### Attach to a container
   651  
   652  `POST /containers/(id)/attach`
   653  
   654  Attach to the container `id`
   655  
   656  **Example request**:
   657  
   658          POST /containers/16253994b7c4/attach?logs=1&stream=0&stdout=1 HTTP/1.1
   659  
   660  **Example response**:
   661  
   662          HTTP/1.1 200 OK
   663          Content-Type: application/vnd.docker.raw-stream
   664  
   665          {{ STREAM }}
   666  
   667  Query Parameters:
   668  
   669  -   **logs** – 1/True/true or 0/False/false, return logs. Default false
   670  -   **stream** – 1/True/true or 0/False/false, return stream.
   671          Default false
   672  -   **stdin** – 1/True/true or 0/False/false, if stream=true, attach
   673          to stdin. Default false
   674  -   **stdout** – 1/True/true or 0/False/false, if logs=true, return
   675          stdout log, if stream=true, attach to stdout. Default false
   676  -   **stderr** – 1/True/true or 0/False/false, if logs=true, return
   677          stderr log, if stream=true, attach to stderr. Default false
   678  
   679  Status Codes:
   680  
   681  -   **200** – no error
   682  -   **400** – bad parameter
   683  -   **404** – no such container
   684  -   **500** – server error
   685  
   686      **Stream details**:
   687  
   688      When using the TTY setting is enabled in
   689      [`POST /containers/create`
   690      ](#create-a-container),
   691      the stream is the raw data from the process PTY and client's stdin.
   692      When the TTY is disabled, then the stream is multiplexed to separate
   693      stdout and stderr.
   694  
   695      The format is a **Header** and a **Payload** (frame).
   696  
   697      **HEADER**
   698  
   699      The header will contain the information on which stream write the
   700      stream (stdout or stderr). It also contain the size of the
   701      associated frame encoded on the last 4 bytes (uint32).
   702  
   703      It is encoded on the first 8 bytes like this:
   704  
   705          header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}
   706  
   707      `STREAM_TYPE` can be:
   708  
   709  -   0: stdin (will be written on stdout)
   710  -   1: stdout
   711  -   2: stderr
   712  
   713      `SIZE1, SIZE2, SIZE3, SIZE4` are the 4 bytes of
   714      the uint32 size encoded as big endian.
   715  
   716      **PAYLOAD**
   717  
   718      The payload is the raw stream.
   719  
   720      **IMPLEMENTATION**
   721  
   722      The simplest way to implement the Attach protocol is the following:
   723  
   724      1.  Read 8 bytes
   725      2.  chose stdout or stderr depending on the first byte
   726      3.  Extract the frame size from the last 4 bytes
   727      4.  Read the extracted size and output it on the correct output
   728      5.  Goto 1
   729  
   730  ### Attach to a container (websocket)
   731  
   732  `GET /containers/(id)/attach/ws`
   733  
   734  Attach to the container `id` via websocket
   735  
   736  Implements websocket protocol handshake according to [RFC 6455](http://tools.ietf.org/html/rfc6455)
   737  
   738  **Example request**
   739  
   740          GET /containers/e90e34656806/attach/ws?logs=0&stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1
   741  
   742  **Example response**
   743  
   744          {{ STREAM }}
   745  
   746  Query Parameters:
   747  
   748  -   **logs** – 1/True/true or 0/False/false, return logs. Default false
   749  -   **stream** – 1/True/true or 0/False/false, return stream.
   750          Default false
   751  -   **stdin** – 1/True/true or 0/False/false, if stream=true, attach
   752          to stdin. Default false
   753  -   **stdout** – 1/True/true or 0/False/false, if logs=true, return
   754          stdout log, if stream=true, attach to stdout. Default false
   755  -   **stderr** – 1/True/true or 0/False/false, if logs=true, return
   756          stderr log, if stream=true, attach to stderr. Default false
   757  
   758  Status Codes:
   759  
   760  -   **200** – no error
   761  -   **400** – bad parameter
   762  -   **404** – no such container
   763  -   **500** – server error
   764  
   765  ### Wait a container
   766  
   767  `POST /containers/(id)/wait`
   768  
   769  Block until container `id` stops, then returns the exit code
   770  
   771  **Example request**:
   772  
   773          POST /containers/16253994b7c4/wait HTTP/1.1
   774  
   775  **Example response**:
   776  
   777          HTTP/1.1 200 OK
   778          Content-Type: application/json
   779  
   780          {"StatusCode": 0}
   781  
   782  Status Codes:
   783  
   784  -   **200** – no error
   785  -   **404** – no such container
   786  -   **500** – server error
   787  
   788  ### Remove a container
   789  
   790  `DELETE /containers/(id)`
   791  
   792  Remove the container `id` from the filesystem
   793  
   794  **Example request**:
   795  
   796          DELETE /containers/16253994b7c4?v=1 HTTP/1.1
   797  
   798  **Example response**:
   799  
   800          HTTP/1.1 204 No Content
   801  
   802  Query Parameters:
   803  
   804  -   **v** – 1/True/true or 0/False/false, Remove the volumes
   805          associated to the container. Default false
   806  -   **force** - 1/True/true or 0/False/false, Kill then remove the container.
   807          Default false
   808  
   809  Status Codes:
   810  
   811  -   **204** – no error
   812  -   **400** – bad parameter
   813  -   **404** – no such container
   814  -   **500** – server error
   815  
   816  ### Copy files or folders from a container
   817  
   818  `POST /containers/(id)/copy`
   819  
   820  Copy files or folders of container `id`
   821  
   822  **Example request**:
   823  
   824          POST /containers/4fa6e0f0c678/copy HTTP/1.1
   825          Content-Type: application/json
   826  
   827          {
   828               "Resource": "test.txt"
   829          }
   830  
   831  **Example response**:
   832  
   833          HTTP/1.1 200 OK
   834          Content-Type: application/x-tar
   835  
   836          {{ TAR STREAM }}
   837  
   838  Status Codes:
   839  
   840  -   **200** – no error
   841  -   **404** – no such container
   842  -   **500** – server error
   843  
   844  ## 2.2 Images
   845  
   846  ### List Images
   847  
   848  `GET /images/json`
   849  
   850  **Example request**:
   851  
   852          GET /images/json?all=0 HTTP/1.1
   853  
   854  **Example response**:
   855  
   856          HTTP/1.1 200 OK
   857          Content-Type: application/json
   858  
   859          [
   860            {
   861               "RepoTags": [
   862                 "ubuntu:12.04",
   863                 "ubuntu:precise",
   864                 "ubuntu:latest"
   865               ],
   866               "Id": "8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c",
   867               "Created": 1365714795,
   868               "Size": 131506275,
   869               "VirtualSize": 131506275
   870            },
   871            {
   872               "RepoTags": [
   873                 "ubuntu:12.10",
   874                 "ubuntu:quantal"
   875               ],
   876               "ParentId": "27cf784147099545",
   877               "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc",
   878               "Created": 1364102658,
   879               "Size": 24653,
   880               "VirtualSize": 180116135
   881            }
   882          ]
   883  
   884  
   885  Query Parameters:
   886  
   887  -   **all** – 1/True/true or 0/False/false, default false
   888  -   **filters** – a json encoded value of the filters (a map[string][]string) to process on the images list. Available filters:
   889    -   dangling=true
   890  -   **filter** - only return images with the specified name
   891  
   892  ### Create an image
   893  
   894  `POST /images/create`
   895  
   896  Create an image, either by pulling it from the registry or by importing it
   897  
   898  **Example request**:
   899  
   900          POST /images/create?fromImage=ubuntu HTTP/1.1
   901  
   902  **Example response**:
   903  
   904          HTTP/1.1 200 OK
   905          Content-Type: application/json
   906  
   907          {"status": "Pulling..."}
   908          {"status": "Pulling", "progress": "1 B/ 100 B", "progressDetail": {"current": 1, "total": 100}}
   909          {"error": "Invalid..."}
   910          ...
   911  
   912      When using this endpoint to pull an image from the registry, the
   913      `X-Registry-Auth` header can be used to include
   914      a base64-encoded AuthConfig object.
   915  
   916  Query Parameters:
   917  
   918  -   **fromImage** – name of the image to pull
   919  -   **fromSrc** – source to import.  The value may be a URL from which the image
   920          can be retrieved or `-` to read the image from the request body.
   921  -   **repo** – repository
   922  -   **tag** – tag
   923  -   **registry** – the registry to pull from
   924  
   925      Request Headers:
   926  
   927  -   **X-Registry-Auth** – base64-encoded AuthConfig object
   928  
   929  Status Codes:
   930  
   931  -   **200** – no error
   932  -   **500** – server error
   933  
   934  
   935  
   936  ### Inspect an image
   937  
   938  `GET /images/(name)/json`
   939  
   940  Return low-level information on the image `name`
   941  
   942  **Example request**:
   943  
   944          GET /images/ubuntu/json HTTP/1.1
   945  
   946  **Example response**:
   947  
   948          HTTP/1.1 200 OK
   949          Content-Type: application/json
   950  
   951          {
   952               "Created": "2013-03-23T22:24:18.818426-07:00",
   953               "Container": "3d67245a8d72ecf13f33dffac9f79dcdf70f75acb84d308770391510e0c23ad0",
   954               "ContainerConfig":
   955                       {
   956                               "Hostname": "",
   957                               "User": "",
   958                               "Memory": 0,
   959                               "MemorySwap": 0,
   960                               "AttachStdin": false,
   961                               "AttachStdout": false,
   962                               "AttachStderr": false,
   963                               "PortSpecs": null,
   964                               "Tty": true,
   965                               "OpenStdin": true,
   966                               "StdinOnce": false,
   967                               "Env": null,
   968                               "Cmd": ["/bin/bash"],
   969                               "Dns": null,
   970                               "Image": "ubuntu",
   971                               "Volumes": null,
   972                               "VolumesFrom": "",
   973                               "WorkingDir": ""
   974                       },
   975               "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc",
   976               "Parent": "27cf784147099545",
   977               "Size": 6824592
   978          }
   979  
   980  Status Codes:
   981  
   982  -   **200** – no error
   983  -   **404** – no such image
   984  -   **500** – server error
   985  
   986  ### Get the history of an image
   987  
   988  `GET /images/(name)/history`
   989  
   990  Return the history of the image `name`
   991  
   992  **Example request**:
   993  
   994          GET /images/ubuntu/history HTTP/1.1
   995  
   996  **Example response**:
   997  
   998          HTTP/1.1 200 OK
   999          Content-Type: application/json
  1000  
  1001          [
  1002               {
  1003                       "Id": "b750fe79269d",
  1004                       "Created": 1364102658,
  1005                       "CreatedBy": "/bin/bash"
  1006               },
  1007               {
  1008                       "Id": "27cf78414709",
  1009                       "Created": 1364068391,
  1010                       "CreatedBy": ""
  1011               }
  1012          ]
  1013  
  1014  Status Codes:
  1015  
  1016  -   **200** – no error
  1017  -   **404** – no such image
  1018  -   **500** – server error
  1019  
  1020  ### Push an image on the registry
  1021  
  1022  `POST /images/(name)/push`
  1023  
  1024  Push the image `name` on the registry
  1025  
  1026  **Example request**:
  1027  
  1028          POST /images/test/push HTTP/1.1
  1029  
  1030  **Example response**:
  1031  
  1032          HTTP/1.1 200 OK
  1033          Content-Type: application/json
  1034  
  1035          {"status": "Pushing..."}
  1036          {"status": "Pushing", "progress": "1/? (n/a)", "progressDetail": {"current": 1}}}
  1037          {"error": "Invalid..."}
  1038          ...
  1039  
  1040      If you wish to push an image on to a private registry, that image must already have been tagged
  1041      into a repository which references that registry host name and port.  This repository name should
  1042      then be used in the URL. This mirrors the flow of the CLI.
  1043  
  1044  **Example request**:
  1045  
  1046          POST /images/registry.acme.com:5000/test/push HTTP/1.1
  1047  
  1048  
  1049  Query Parameters:
  1050  
  1051  -   **tag** – the tag to associate with the image on the registry, optional
  1052  
  1053  Request Headers:
  1054  
  1055  -   **X-Registry-Auth** – include a base64-encoded AuthConfig
  1056          object.
  1057  
  1058  Status Codes:
  1059  
  1060  -   **200** – no error
  1061  -   **404** – no such image
  1062  -   **500** – server error
  1063  
  1064  ### Tag an image into a repository
  1065  
  1066  `POST /images/(name)/tag`
  1067  
  1068  Tag the image `name` into a repository
  1069  
  1070  **Example request**:
  1071  
  1072          POST /images/test/tag?repo=myrepo&force=0&tag=v42 HTTP/1.1
  1073  
  1074  **Example response**:
  1075  
  1076          HTTP/1.1 201 OK
  1077  
  1078  Query Parameters:
  1079  
  1080  -   **repo** – The repository to tag in
  1081  -   **force** – 1/True/true or 0/False/false, default false
  1082  -   **tag** - The new tag name
  1083  
  1084  Status Codes:
  1085  
  1086  -   **201** – no error
  1087  -   **400** – bad parameter
  1088  -   **404** – no such image
  1089  -   **409** – conflict
  1090  -   **500** – server error
  1091  
  1092  ### Remove an image
  1093  
  1094  `DELETE /images/(name)`
  1095  
  1096  Remove the image `name` from the filesystem
  1097  
  1098  **Example request**:
  1099  
  1100          DELETE /images/test HTTP/1.1
  1101  
  1102  **Example response**:
  1103  
  1104          HTTP/1.1 200 OK
  1105          Content-type: application/json
  1106  
  1107          [
  1108           {"Untagged": "3e2f21a89f"},
  1109           {"Deleted": "3e2f21a89f"},
  1110           {"Deleted": "53b4f83ac9"}
  1111          ]
  1112  
  1113  Query Parameters:
  1114  
  1115  -   **force** – 1/True/true or 0/False/false, default false
  1116  -   **noprune** – 1/True/true or 0/False/false, default false
  1117  
  1118  Status Codes:
  1119  
  1120  -   **200** – no error
  1121  -   **404** – no such image
  1122  -   **409** – conflict
  1123  -   **500** – server error
  1124  
  1125  ### Search images
  1126  
  1127  `GET /images/search`
  1128  
  1129  Search for an image on [Docker Hub](https://hub.docker.com).
  1130  
  1131  > **Note**:
  1132  > The response keys have changed from API v1.6 to reflect the JSON
  1133  > sent by the registry server to the docker daemon's request.
  1134  
  1135  **Example request**:
  1136  
  1137          GET /images/search?term=sshd HTTP/1.1
  1138  
  1139  **Example response**:
  1140  
  1141          HTTP/1.1 200 OK
  1142          Content-Type: application/json
  1143  
  1144          [
  1145                  {
  1146                      "description": "",
  1147                      "is_official": false,
  1148                      "is_automated": false,
  1149                      "name": "wma55/u1210sshd",
  1150                      "star_count": 0
  1151                  },
  1152                  {
  1153                      "description": "",
  1154                      "is_official": false,
  1155                      "is_automated": false,
  1156                      "name": "jdswinbank/sshd",
  1157                      "star_count": 0
  1158                  },
  1159                  {
  1160                      "description": "",
  1161                      "is_official": false,
  1162                      "is_automated": false,
  1163                      "name": "vgauthier/sshd",
  1164                      "star_count": 0
  1165                  }
  1166          ...
  1167          ]
  1168  
  1169  Query Parameters:
  1170  
  1171  -   **term** – term to search
  1172  
  1173  Status Codes:
  1174  
  1175  -   **200** – no error
  1176  -   **500** – server error
  1177  
  1178  ## 2.3 Misc
  1179  
  1180  ### Build an image from Dockerfile via stdin
  1181  
  1182  `POST /build`
  1183  
  1184  Build an image from Dockerfile via stdin
  1185  
  1186  **Example request**:
  1187  
  1188          POST /build HTTP/1.1
  1189  
  1190          {{ TAR STREAM }}
  1191  
  1192  **Example response**:
  1193  
  1194          HTTP/1.1 200 OK
  1195          Content-Type: application/json
  1196  
  1197          {"stream": "Step 1..."}
  1198          {"stream": "..."}
  1199          {"error": "Error...", "errorDetail": {"code": 123, "message": "Error..."}}
  1200  
  1201      The stream must be a tar archive compressed with one of the
  1202      following algorithms: identity (no compression), gzip, bzip2, xz.
  1203  
  1204      The archive must include a file called `Dockerfile`
  1205      at its root. It may include any number of other files,
  1206      which will be accessible in the build context (See the [*ADD build
  1207      command*](../../reference/builder.md#dockerbuilder)).
  1208  
  1209  Query Parameters:
  1210  
  1211  -   **t** – repository name (and optionally a tag) to be applied to
  1212          the resulting image in case of success
  1213  -   **remote** – git or HTTP/HTTPS URI build source
  1214  -   **q** – suppress verbose build output
  1215  -   **nocache** – do not use the cache when building the image
  1216  -   **pull** - attempt to pull the image even if an older image exists locally
  1217  -   **rm** - remove intermediate containers after a successful build (default behavior)
  1218  -   **forcerm** - always remove intermediate containers (includes rm)
  1219  
  1220      Request Headers:
  1221  
  1222  -   **Content-type** – should be set to `"application/tar"`.
  1223  -   **X-Registry-Config** – base64-encoded ConfigFile object
  1224  
  1225  Status Codes:
  1226  
  1227  -   **200** – no error
  1228  -   **500** – server error
  1229  
  1230  ### Check auth configuration
  1231  
  1232  `POST /auth`
  1233  
  1234  Get the default username and email
  1235  
  1236  **Example request**:
  1237  
  1238          POST /auth HTTP/1.1
  1239          Content-Type: application/json
  1240  
  1241          {
  1242               "username":" hannibal",
  1243               "password: "xxxx",
  1244               "email": "hannibal@a-team.com",
  1245               "serveraddress": "https://index.docker.io/v1/"
  1246          }
  1247  
  1248  **Example response**:
  1249  
  1250          HTTP/1.1 200 OK
  1251  
  1252  Status Codes:
  1253  
  1254  -   **200** – no error
  1255  -   **204** – no error
  1256  -   **500** – server error
  1257  
  1258  ### Display system-wide information
  1259  
  1260  `GET /info`
  1261  
  1262  Display system-wide information
  1263  
  1264  **Example request**:
  1265  
  1266          GET /info HTTP/1.1
  1267  
  1268  **Example response**:
  1269  
  1270          HTTP/1.1 200 OK
  1271          Content-Type: application/json
  1272  
  1273          {
  1274               "Containers":11,
  1275               "Images":16,
  1276               "Driver":"btrfs",
  1277               "DriverStatus": [[""]],
  1278               "ExecutionDriver":"native-0.1",
  1279               "KernelVersion":"3.12.0-1-amd64"
  1280               "NCPU":1,
  1281               "MemTotal":2099236864,
  1282               "Name":"prod-server-42",
  1283               "ID":"7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS",
  1284               "Debug":false,
  1285               "NFd": 11,
  1286               "NGoroutines":21,
  1287               "NEventsListener":0,
  1288               "InitPath":"/usr/bin/docker",
  1289               "InitSha1":"",
  1290               "IndexServerAddress":["https://index.docker.io/v1/"],
  1291               "MemoryLimit":true,
  1292               "SwapLimit":false,
  1293               "IPv4Forwarding":true,
  1294               "Labels":["storage=ssd"],
  1295               "DockerRootDir": "/var/lib/docker",
  1296               "OperatingSystem": "Boot2Docker",
  1297          }
  1298  
  1299  Status Codes:
  1300  
  1301  -   **200** – no error
  1302  -   **500** – server error
  1303  
  1304  ### Show the docker version information
  1305  
  1306  `GET /version`
  1307  
  1308  Show the docker version information
  1309  
  1310  **Example request**:
  1311  
  1312          GET /version HTTP/1.1
  1313  
  1314  **Example response**:
  1315  
  1316          HTTP/1.1 200 OK
  1317          Content-Type: application/json
  1318  
  1319          {
  1320               "ApiVersion": "1.12",
  1321               "Version": "0.2.2",
  1322               "GitCommit": "5a2a5cc+CHANGES",
  1323               "GoVersion": "go1.0.3"
  1324          }
  1325  
  1326  Status Codes:
  1327  
  1328  -   **200** – no error
  1329  -   **500** – server error
  1330  
  1331  ### Ping the docker server
  1332  
  1333  `GET /_ping`
  1334  
  1335  Ping the docker server
  1336  
  1337  **Example request**:
  1338  
  1339          GET /_ping HTTP/1.1
  1340  
  1341  **Example response**:
  1342  
  1343          HTTP/1.1 200 OK
  1344          Content-Type: text/plain
  1345  
  1346          OK
  1347  
  1348  Status Codes:
  1349  
  1350  -   **200** - no error
  1351  -   **500** - server error
  1352  
  1353  ### Create a new image from a container's changes
  1354  
  1355  `POST /commit`
  1356  
  1357  Create a new image from a container's changes
  1358  
  1359  **Example request**:
  1360  
  1361          POST /commit?container=44c004db4b17&comment=message&repo=myrepo HTTP/1.1
  1362          Content-Type: application/json
  1363  
  1364          {
  1365               "Hostname": "",
  1366               "Domainname": "",
  1367               "User": "",
  1368               "Memory": 0,
  1369               "MemorySwap": 0,
  1370               "CpuShares": 512,
  1371               "Cpuset": "0,1",
  1372               "AttachStdin": false,
  1373               "AttachStdout": true,
  1374               "AttachStderr": true,
  1375               "PortSpecs": null,
  1376               "Tty": false,
  1377               "OpenStdin": false,
  1378               "StdinOnce": false,
  1379               "Env": null,
  1380               "Cmd": [
  1381                       "date"
  1382               ],
  1383               "Volumes": {
  1384                       "/tmp": {}
  1385               },
  1386               "WorkingDir": "",
  1387               "NetworkDisabled": false,
  1388               "ExposedPorts": {
  1389                       "22/tcp": {}
  1390               }
  1391          }
  1392  
  1393  **Example response**:
  1394  
  1395          HTTP/1.1 201 Created
  1396          Content-Type: application/json
  1397  
  1398          {"Id": "596069db4bf5"}
  1399  
  1400  Json Parameters:
  1401  
  1402  -  **config** - the container's configuration
  1403  
  1404  Query Parameters:
  1405  
  1406  -   **container** – source container
  1407  -   **repo** – repository
  1408  -   **tag** – tag
  1409  -   **comment** – commit message
  1410  -   **author** – author (e.g., "John Hannibal Smith
  1411      <[hannibal@a-team.com](mailto:hannibal%40a-team.com)>")
  1412  
  1413  Status Codes:
  1414  
  1415  -   **201** – no error
  1416  -   **404** – no such container
  1417  -   **500** – server error
  1418  
  1419  ### Monitor Docker's events
  1420  
  1421  `GET /events`
  1422  
  1423  Get container events from docker, either in real time via streaming, or via
  1424  polling (using since).
  1425  
  1426  Docker containers will report the following events:
  1427  
  1428      create, destroy, die, export, kill, pause, restart, start, stop, unpause
  1429  
  1430  and Docker images will report:
  1431  
  1432      untag, delete
  1433  
  1434  **Example request**:
  1435  
  1436          GET /events?since=1374067924
  1437  
  1438  **Example response**:
  1439  
  1440          HTTP/1.1 200 OK
  1441          Content-Type: application/json
  1442  
  1443          {"status": "create", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067924}
  1444          {"status": "start", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067924}
  1445          {"status": "stop", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067966}
  1446          {"status": "destroy", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067970}
  1447  
  1448  Query Parameters:
  1449  
  1450  -   **since** – timestamp used for polling
  1451  -   **until** – timestamp used for polling
  1452  -   **filters** – a json encoded value of the filters (a map[string][]string) to process on the event list. Available filters:
  1453    -   event=&lt;string&gt; -- event to filter
  1454    -   image=&lt;string&gt; -- image to filter
  1455    -   container=&lt;string&gt; -- container to filter
  1456  
  1457  Status Codes:
  1458  
  1459  -   **200** – no error
  1460  -   **500** – server error
  1461  
  1462  ### Get a tarball containing all images in a repository
  1463  
  1464  `GET /images/(name)/get`
  1465  
  1466  Get a tarball containing all images and metadata for the repository specified
  1467  by `name`.
  1468  
  1469  If `name` is a specific name and tag (e.g. ubuntu:latest), then only that image
  1470  (and its parents) are returned. If `name` is an image ID, similarly only that
  1471  image (and its parents) are returned, but with the exclusion of the
  1472  'repositories' file in the tarball, as there were no image names referenced.
  1473  
  1474  See the [image tarball format](#image-tarball-format) for more details.
  1475  
  1476  **Example request**
  1477  
  1478          GET /images/ubuntu/get
  1479  
  1480  **Example response**:
  1481  
  1482          HTTP/1.1 200 OK
  1483          Content-Type: application/x-tar
  1484  
  1485          Binary data stream
  1486  
  1487  Status Codes:
  1488  
  1489  -   **200** – no error
  1490  -   **500** – server error
  1491  
  1492  ### Get a tarball containing all images.
  1493  
  1494  `GET /images/get`
  1495  
  1496  Get a tarball containing all images and metadata for one or more repositories.
  1497  
  1498  For each value of the `names` parameter: if it is a specific name and tag (e.g.
  1499  ubuntu:latest), then only that image (and its parents) are returned; if it is
  1500  an image ID, similarly only that image (and its parents) are returned and there
  1501  would be no names referenced in the 'repositories' file for this image ID.
  1502  
  1503  See the [image tarball format](#image-tarball-format) for more details.
  1504  
  1505  **Example request**
  1506  
  1507          GET /images/get?names=myname%2Fmyapp%3Alatest&names=busybox
  1508  
  1509  **Example response**:
  1510  
  1511          HTTP/1.1 200 OK
  1512          Content-Type: application/x-tar
  1513  
  1514          Binary data stream
  1515  
  1516  Status Codes:
  1517  
  1518  -   **200** – no error
  1519  -   **500** – server error
  1520  
  1521  ### Load a tarball with a set of images and tags into docker
  1522  
  1523  `POST /images/load`
  1524  
  1525  Load a set of images and tags into the docker repository.
  1526  See the [image tarball format](#image-tarball-format) for more details.
  1527  
  1528  **Example request**
  1529  
  1530          POST /images/load
  1531  
  1532          Tarball in body
  1533  
  1534  **Example response**:
  1535  
  1536          HTTP/1.1 200 OK
  1537  
  1538  Status Codes:
  1539  
  1540  -   **200** – no error
  1541  -   **500** – server error
  1542  
  1543  ### Image tarball format
  1544  
  1545  An image tarball contains one directory per image layer (named using its long ID),
  1546  each containing three files:
  1547  
  1548  1. `VERSION`: currently `1.0` - the file format version
  1549  2. `json`: detailed layer information, similar to `docker inspect layer_id`
  1550  3. `layer.tar`: A tarfile containing the filesystem changes in this layer
  1551  
  1552  The `layer.tar` file will contain `aufs` style `.wh..wh.aufs` files and directories
  1553  for storing attribute changes and deletions.
  1554  
  1555  If the tarball defines a repository, there will also be a `repositories` file at
  1556  the root that contains a list of repository and tag names mapped to layer IDs.
  1557  
  1558  ```
  1559  {"hello-world":
  1560      {"latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1"}
  1561  }
  1562  ```
  1563  
  1564  ### Exec Create
  1565  
  1566  `POST /containers/(id)/exec`
  1567  
  1568  Sets up an exec instance in a running container `id`
  1569  
  1570  **Example request**:
  1571  
  1572          POST /containers/e90e34656806/exec HTTP/1.1
  1573          Content-Type: application/json
  1574  
  1575          {
  1576  	     "AttachStdin": false,
  1577  	     "AttachStdout": true,
  1578  	     "AttachStderr": true,
  1579  	     "Tty": false,
  1580  	     "Cmd": [
  1581                       "date"
  1582               ],
  1583          }
  1584  
  1585  **Example response**:
  1586  
  1587          HTTP/1.1 201 OK
  1588          Content-Type: application/json
  1589  
  1590          {
  1591               "Id": "f90e34656806"
  1592          }
  1593  
  1594  Json Parameters:
  1595  
  1596  -   **AttachStdin** - Boolean value, attaches to stdin of the exec command.
  1597  -   **AttachStdout** - Boolean value, attaches to stdout of the exec command.
  1598  -   **AttachStderr** - Boolean value, attaches to stderr of the exec command.
  1599  -   **Tty** - Boolean value to allocate a pseudo-TTY
  1600  -   **Cmd** - Command to run specified as a string or an array of strings.
  1601  
  1602  
  1603  Status Codes:
  1604  
  1605  -   **201** – no error
  1606  -   **404** – no such container
  1607  
  1608  ### Exec Start
  1609  
  1610  `POST /exec/(id)/start`
  1611  
  1612  Starts a previously set up exec instance `id`. If `detach` is true, this API
  1613  returns after starting the `exec` command. Otherwise, this API sets up an
  1614  interactive session with the `exec` command.
  1615  
  1616  **Example request**:
  1617  
  1618          POST /exec/e90e34656806/start HTTP/1.1
  1619          Content-Type: application/json
  1620  
  1621          {
  1622  	     "Detach": false,
  1623  	     "Tty": false,
  1624          }
  1625  
  1626  **Example response**:
  1627  
  1628          HTTP/1.1 201 OK
  1629          Content-Type: application/json
  1630  
  1631          {{ STREAM }}
  1632  
  1633  Json Parameters:
  1634  
  1635  -   **Detach** - Detach from the exec command
  1636  -   **Tty** - Boolean value to allocate a pseudo-TTY
  1637  
  1638  Status Codes:
  1639  
  1640  -   **200** – no error
  1641  -   **404** – no such exec instance
  1642  
  1643      **Stream details**:
  1644      Similar to the stream behavior of `POST /container/(id)/attach` API
  1645  
  1646  ### Exec Resize
  1647  
  1648  `POST /exec/(id)/resize`
  1649  
  1650  Resizes the tty session used by the exec command `id`.
  1651  This API is valid only if `tty` was specified as part of creating and starting the exec command.
  1652  
  1653  **Example request**:
  1654  
  1655          POST /exec/e90e34656806/resize HTTP/1.1
  1656          Content-Type: plain/text
  1657  
  1658  **Example response**:
  1659  
  1660          HTTP/1.1 201 OK
  1661          Content-Type: plain/text
  1662  
  1663  Query Parameters:
  1664  
  1665  -   **h** – height of tty session
  1666  -   **w** – width
  1667  
  1668  Status Codes:
  1669  
  1670  -   **201** – no error
  1671  -   **404** – no such exec instance
  1672  
  1673  ### Exec Inspect
  1674  
  1675  `GET /exec/(id)/json`
  1676  
  1677  Return low-level information about the exec command `id`.
  1678  
  1679  **Example request**:
  1680  
  1681          GET /exec/11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39/json HTTP/1.1
  1682  
  1683  **Example response**:
  1684  
  1685          HTTP/1.1 200 OK
  1686          Content-Type: plain/text
  1687  
  1688          {
  1689            "ID" : "11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39",
  1690            "Running" : false,
  1691            "ExitCode" : 2,
  1692            "ProcessConfig" : {
  1693              "privileged" : false,
  1694              "user" : "",
  1695              "tty" : false,
  1696              "entrypoint" : "sh",
  1697              "arguments" : [
  1698                "-c",
  1699                "exit 2"
  1700              ]
  1701            },
  1702            "OpenStdin" : false,
  1703            "OpenStderr" : false,
  1704            "OpenStdout" : false,
  1705            "Container" : {
  1706              "State" : {
  1707                "Running" : true,
  1708                "Paused" : false,
  1709                "Restarting" : false,
  1710                "OOMKilled" : false,
  1711                "Pid" : 3650,
  1712                "ExitCode" : 0,
  1713                "Error" : "",
  1714                "StartedAt" : "2014-11-17T22:26:03.717657531Z",
  1715                "FinishedAt" : "0001-01-01T00:00:00Z"
  1716              },
  1717              "ID" : "8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c",
  1718              "Created" : "2014-11-17T22:26:03.626304998Z",
  1719              "Path" : "date",
  1720              "Args" : [],
  1721              "Config" : {
  1722                "Hostname" : "8f177a186b97",
  1723                "Domainname" : "",
  1724                "User" : "",
  1725                "Memory" : 0,
  1726                "MemorySwap" : 0,
  1727                "CpuShares" : 0,
  1728                "Cpuset" : "",
  1729                "AttachStdin" : false,
  1730                "AttachStdout" : false,
  1731                "AttachStderr" : false,
  1732                "PortSpecs" : null,
  1733                "ExposedPorts" : null,
  1734                "Tty" : false,
  1735                "OpenStdin" : false,
  1736                "StdinOnce" : false,
  1737                "Env" : [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ],
  1738                "Cmd" : [
  1739                  "date"
  1740                ],
  1741                "Image" : "ubuntu",
  1742                "Volumes" : null,
  1743                "WorkingDir" : "",
  1744                "Entrypoint" : null,
  1745                "NetworkDisabled" : false,
  1746                "MacAddress" : "",
  1747                "OnBuild" : null,
  1748                "SecurityOpt" : null
  1749              },
  1750              "Image" : "5506de2b643be1e6febbf3b8a240760c6843244c41e12aa2f60ccbb7153d17f5",
  1751              "NetworkSettings" : {
  1752                "IPAddress" : "172.17.0.2",
  1753                "IPPrefixLen" : 16,
  1754                "MacAddress" : "02:42:ac:11:00:02",
  1755                "Gateway" : "172.17.42.1",
  1756                "Bridge" : "docker0",
  1757                "PortMapping" : null,
  1758                "Ports" : {}
  1759              },
  1760              "ResolvConfPath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/resolv.conf",
  1761              "HostnamePath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/hostname",
  1762              "HostsPath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/hosts",
  1763              "Name" : "/test",
  1764              "Driver" : "aufs",
  1765              "ExecDriver" : "native-0.2",
  1766              "MountLabel" : "",
  1767              "ProcessLabel" : "",
  1768              "AppArmorProfile" : "",
  1769              "RestartCount" : 0,
  1770              "Volumes" : {},
  1771              "VolumesRW" : {}
  1772            }
  1773          }
  1774  
  1775  Status Codes:
  1776  
  1777  -   **200** – no error
  1778  -   **404** – no such exec instance
  1779  -   **500** - server error
  1780  
  1781  # 3. Going further
  1782  
  1783  ## 3.1 Inside `docker run`
  1784  
  1785  As an example, the `docker run` command line makes the following API calls:
  1786  
  1787  - Create the container
  1788  
  1789  - If the status code is 404, it means the image doesn't exist:
  1790      - Try to pull it
  1791      - Then retry to create the container
  1792  
  1793  - Start the container
  1794  
  1795  - If you are not in detached mode:
  1796  - Attach to the container, using logs=1 (to have stdout and
  1797        stderr from the container's start) and stream=1
  1798  
  1799  - If in detached mode or only stdin is attached:
  1800  - Display the container's id
  1801  
  1802  ## 3.2 Hijacking
  1803  
  1804  In this version of the API, /attach, uses hijacking to transport stdin,
  1805  stdout and stderr on the same socket. This might change in the future.
  1806  
  1807  ## 3.3 CORS Requests
  1808  
  1809  To enable cross origin requests to the remote api add the flag
  1810  "--api-enable-cors" when running docker in daemon mode.
  1811  
  1812      $ docker -d -H="192.168.1.9:2375" --api-enable-cors