github.com/jingleWang/moby@v1.13.1/docs/api/v1.20.md (about)

     1  ---
     2  title: "Engine API v1.20"
     3  description: "API Documentation for Docker"
     4  keywords: "API, Docker, rcli, REST, documentation"
     5  redirect_from:
     6  - /engine/reference/api/docker_remote_api_v1.20/
     7  - /reference/api/docker_remote_api_v1.20/
     8  ---
     9  
    10  <!-- This file is maintained within the docker/docker Github
    11       repository at https://github.com/docker/docker/. Make all
    12       pull requests against that repo. If you see this file in
    13       another repository, consider it read-only there, as it will
    14       periodically be overwritten by the definitive file. Pull
    15       requests which include edits to this file in other repositories
    16       will be rejected.
    17  -->
    18  
    19  ## 1. Brief introduction
    20  
    21   - The daemon listens on `unix:///var/run/docker.sock` but you can
    22     [Bind Docker to another host/port or a Unix socket](../reference/commandline/dockerd.md#bind-docker-to-another-host-port-or-a-unix-socket).
    23   - The API tends to be REST. However, for some complex commands, like `attach`
    24     or `pull`, the HTTP connection is hijacked to transport `stdout`,
    25     `stdin` and `stderr`.
    26  
    27  ## 2. Endpoints
    28  
    29  ### 2.1 Containers
    30  
    31  #### List containers
    32  
    33  `GET /containers/json`
    34  
    35  List containers
    36  
    37  **Example request**:
    38  
    39      GET /v1.20/containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1
    40  
    41  **Example response**:
    42  
    43      HTTP/1.1 200 OK
    44      Content-Type: application/json
    45  
    46      [
    47           {
    48                   "Id": "8dfafdbc3a40",
    49                   "Names":["/boring_feynman"],
    50                   "Image": "ubuntu:latest",
    51                   "Command": "echo 1",
    52                   "Created": 1367854155,
    53                   "Status": "Exit 0",
    54                   "Ports": [{"PrivatePort": 2222, "PublicPort": 3333, "Type": "tcp"}],
    55                   "Labels": {
    56                           "com.example.vendor": "Acme",
    57                           "com.example.license": "GPL",
    58                           "com.example.version": "1.0"
    59                   },
    60                   "SizeRw": 12288,
    61                   "SizeRootFs": 0
    62           },
    63           {
    64                   "Id": "9cd87474be90",
    65                   "Names":["/coolName"],
    66                   "Image": "ubuntu:latest",
    67                   "Command": "echo 222222",
    68                   "Created": 1367854155,
    69                   "Status": "Exit 0",
    70                   "Ports": [],
    71                   "Labels": {},
    72                   "SizeRw": 12288,
    73                   "SizeRootFs": 0
    74           },
    75           {
    76                   "Id": "3176a2479c92",
    77                   "Names":["/sleepy_dog"],
    78                   "Image": "ubuntu:latest",
    79                   "Command": "echo 3333333333333333",
    80                   "Created": 1367854154,
    81                   "Status": "Exit 0",
    82                   "Ports":[],
    83                   "Labels": {},
    84                   "SizeRw":12288,
    85                   "SizeRootFs":0
    86           },
    87           {
    88                   "Id": "4cb07b47f9fb",
    89                   "Names":["/running_cat"],
    90                   "Image": "ubuntu:latest",
    91                   "Command": "echo 444444444444444444444444444444444",
    92                   "Created": 1367854152,
    93                   "Status": "Exit 0",
    94                   "Ports": [],
    95                   "Labels": {},
    96                   "SizeRw": 12288,
    97                   "SizeRootFs": 0
    98           }
    99      ]
   100  
   101  **Query parameters**:
   102  
   103  -   **all** – 1/True/true or 0/False/false, Show all containers.
   104          Only running containers are shown by default (i.e., this defaults to false)
   105  -   **limit** – Show `limit` last created
   106          containers, include non-running ones.
   107  -   **since** – Show only containers created since Id, include
   108          non-running ones.
   109  -   **before** – Show only containers created before Id, include
   110          non-running ones.
   111  -   **size** – 1/True/true or 0/False/false, Show the containers
   112          sizes
   113  -   **filters** - a JSON encoded value of the filters (a `map[string][]string`) to process on the containers list. Available filters:
   114    -   `exited=<int>`; -- containers with exit code of  `<int>` ;
   115    -   `status=`(`created`|`restarting`|`running`|`paused`|`exited`)
   116    -   `label=key` or `label="key=value"` of a container label
   117  
   118  **Status codes**:
   119  
   120  -   **200** – no error
   121  -   **400** – bad parameter
   122  -   **500** – server error
   123  
   124  #### Create a container
   125  
   126  `POST /containers/create`
   127  
   128  Create a container
   129  
   130  **Example request**:
   131  
   132      POST /v1.20/containers/create HTTP/1.1
   133      Content-Type: application/json
   134  
   135      {
   136             "Hostname": "",
   137             "Domainname": "",
   138             "User": "",
   139             "AttachStdin": false,
   140             "AttachStdout": true,
   141             "AttachStderr": true,
   142             "Tty": false,
   143             "OpenStdin": false,
   144             "StdinOnce": false,
   145             "Env": [
   146                     "FOO=bar",
   147                     "BAZ=quux"
   148             ],
   149             "Cmd": [
   150                     "date"
   151             ],
   152             "Entrypoint": null,
   153             "Image": "ubuntu",
   154             "Labels": {
   155                     "com.example.vendor": "Acme",
   156                     "com.example.license": "GPL",
   157                     "com.example.version": "1.0"
   158             },
   159             "Volumes": {
   160               "/volumes/data": {}
   161             },
   162             "WorkingDir": "",
   163             "NetworkDisabled": false,
   164             "MacAddress": "12:34:56:78:9a:bc",
   165             "ExposedPorts": {
   166                     "22/tcp": {}
   167             },
   168             "HostConfig": {
   169               "Binds": ["/tmp:/tmp"],
   170               "Links": ["redis3:redis"],
   171               "LxcConf": {"lxc.utsname":"docker"},
   172               "Memory": 0,
   173               "MemorySwap": 0,
   174               "CpuShares": 512,
   175               "CpuPeriod": 100000,
   176               "CpuQuota": 50000,
   177               "CpusetCpus": "0,1",
   178               "CpusetMems": "0,1",
   179               "BlkioWeight": 300,
   180               "MemorySwappiness": 60,
   181               "OomKillDisable": false,
   182               "PidMode": "",
   183               "PortBindings": { "22/tcp": [{ "HostPort": "11022" }] },
   184               "PublishAllPorts": false,
   185               "Privileged": false,
   186               "ReadonlyRootfs": false,
   187               "Dns": ["8.8.8.8"],
   188               "DnsSearch": [""],
   189               "ExtraHosts": null,
   190               "VolumesFrom": ["parent", "other:ro"],
   191               "CapAdd": ["NET_ADMIN"],
   192               "CapDrop": ["MKNOD"],
   193               "GroupAdd": ["newgroup"],
   194               "RestartPolicy": { "Name": "", "MaximumRetryCount": 0 },
   195               "NetworkMode": "bridge",
   196               "Devices": [],
   197               "Ulimits": [{}],
   198               "LogConfig": { "Type": "json-file", "Config": {} },
   199               "SecurityOpt": [],
   200               "CgroupParent": ""
   201            }
   202        }
   203  
   204  **Example response**:
   205  
   206        HTTP/1.1 201 Created
   207        Content-Type: application/json
   208  
   209        {
   210             "Id":"e90e34656806",
   211             "Warnings":[]
   212        }
   213  
   214  **JSON parameters**:
   215  
   216  -   **Hostname** - A string value containing the hostname to use for the
   217        container.
   218  -   **Domainname** - A string value containing the domain name to use
   219        for the container.
   220  -   **User** - A string value specifying the user inside the container.
   221  -   **AttachStdin** - Boolean value, attaches to `stdin`.
   222  -   **AttachStdout** - Boolean value, attaches to `stdout`.
   223  -   **AttachStderr** - Boolean value, attaches to `stderr`.
   224  -   **Tty** - Boolean value, Attach standard streams to a `tty`, including `stdin` if it is not closed.
   225  -   **OpenStdin** - Boolean value, opens `stdin`,
   226  -   **StdinOnce** - Boolean value, close `stdin` after the 1 attached client disconnects.
   227  -   **Env** - A list of environment variables in the form of `["VAR=value", ...]`
   228  -   **Labels** - Adds a map of labels to a container. To specify a map: `{"key":"value", ... }`
   229  -   **Cmd** - Command to run specified as a string or an array of strings.
   230  -   **Entrypoint** - Set the entry point for the container as a string or an array
   231        of strings.
   232  -   **Image** - A string specifying the image name to use for the container.
   233  -   **Volumes** - An object mapping mount point paths (strings) inside the
   234        container to empty objects.
   235  -   **WorkingDir** - A string specifying the working directory for commands to
   236        run in.
   237  -   **NetworkDisabled** - Boolean value, when true disables networking for the
   238        container
   239  -   **ExposedPorts** - An object mapping ports to an empty object in the form of:
   240        `"ExposedPorts": { "<port>/<tcp|udp>: {}" }`
   241  -   **HostConfig**
   242      -   **Binds** – A list of bind-mounts for this container. Each item is a string in one of these forms:
   243             + `host-src:container-dest` to bind-mount a host path into the
   244               container. Both `host-src`, and `container-dest` must be an
   245               _absolute_ path.
   246             + `host-src:container-dest:ro` to make the bind-mount read-only
   247               inside the container. Both `host-src`, and `container-dest` must be
   248               an _absolute_ path.
   249      -   **Links** - A list of links for the container. Each link entry should be
   250            in the form of `container_name:alias`.
   251      -   **LxcConf** - LXC specific configurations. These configurations only
   252            work when using the `lxc` execution driver.
   253      -   **Memory** - Memory limit in bytes.
   254      -   **MemorySwap** - Total memory limit (memory + swap); set `-1` to enable unlimited swap.
   255            You must use this with `memory` and make the swap value larger than `memory`.
   256      -   **CpuShares** - An integer value containing the container's CPU Shares
   257            (ie. the relative weight vs other containers).
   258      -   **CpuPeriod** - The length of a CPU period in microseconds.
   259      -   **CpuQuota** - Microseconds of CPU time that the container can get in a CPU period.
   260      -   **CpusetCpus** - String value containing the `cgroups CpusetCpus` to use.
   261      -   **CpusetMems** - Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems.
   262      -   **BlkioWeight** - Block IO weight (relative weight) accepts a weight value between 10 and 1000.
   263      -   **MemorySwappiness** - Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100.
   264      -   **OomKillDisable** - Boolean value, whether to disable OOM Killer for the container or not.
   265      -   **PidMode** - Set the PID (Process) Namespace mode for the container;
   266            `"container:<name|id>"`: joins another container's PID namespace
   267            `"host"`: use the host's PID namespace inside the container
   268      -   **PortBindings** - A map of exposed container ports and the host port they
   269            should map to. A JSON object in the form
   270            `{ <port>/<protocol>: [{ "HostPort": "<port>" }] }`
   271            Take note that `port` is specified as a string and not an integer value.
   272      -   **PublishAllPorts** - Allocates a random host port for all of a container's
   273            exposed ports. Specified as a boolean value.
   274      -   **Privileged** - Gives the container full access to the host. Specified as
   275            a boolean value.
   276      -   **ReadonlyRootfs** - Mount the container's root filesystem as read only.
   277            Specified as a boolean value.
   278      -   **Dns** - A list of DNS servers for the container to use.
   279      -   **DnsSearch** - A list of DNS search domains
   280      -   **ExtraHosts** - A list of hostnames/IP mappings to add to the
   281          container's `/etc/hosts` file. Specified in the form `["hostname:IP"]`.
   282      -   **VolumesFrom** - A list of volumes to inherit from another container.
   283            Specified in the form `<container name>[:<ro|rw>]`
   284      -   **CapAdd** - A list of kernel capabilities to add to the container.
   285      -   **Capdrop** - A list of kernel capabilities to drop from the container.
   286      -   **GroupAdd** - A list of additional groups that the container process will run as
   287      -   **RestartPolicy** – The behavior to apply when the container exits.  The
   288              value is an object with a `Name` property of either `"always"` to
   289              always restart or `"on-failure"` to restart only when the container
   290              exit code is non-zero.  If `on-failure` is used, `MaximumRetryCount`
   291              controls the number of times to retry before giving up.
   292              The default is not to restart. (optional)
   293              An ever increasing delay (double the previous delay, starting at 100mS)
   294              is added before each restart to prevent flooding the server.
   295      -   **NetworkMode** - Sets the networking mode for the container. Supported
   296            values are: `bridge`, `host`, `none`, and `container:<name|id>`
   297      -   **Devices** - A list of devices to add to the container specified as a JSON object in the
   298        form
   299            `{ "PathOnHost": "/dev/deviceName", "PathInContainer": "/dev/deviceName", "CgroupPermissions": "mrw"}`
   300      -   **Ulimits** - A list of ulimits to set in the container, specified as
   301            `{ "Name": <name>, "Soft": <soft limit>, "Hard": <hard limit> }`, for example:
   302            `Ulimits: { "Name": "nofile", "Soft": 1024, "Hard": 2048 }`
   303      -   **SecurityOpt**: A list of string values to customize labels for MLS
   304          systems, such as SELinux.
   305      -   **LogConfig** - Log configuration for the container, specified as a JSON object in the form
   306            `{ "Type": "<driver_name>", "Config": {"key1": "val1"}}`.
   307            Available types: `json-file`, `syslog`, `journald`, `gelf`, `none`.
   308            `json-file` logging driver.
   309      -   **CgroupParent** - Path to `cgroups` under which the container's `cgroup` is created. If the path is not absolute, the path is considered to be relative to the `cgroups` path of the init process. Cgroups are created if they do not already exist.
   310  
   311  **Query parameters**:
   312  
   313  -   **name** – Assign the specified name to the container. Must
   314      match `/?[a-zA-Z0-9_-]+`.
   315  
   316  **Status codes**:
   317  
   318  -   **201** – no error
   319  -   **400** – bad parameter
   320  -   **404** – no such container
   321  -   **406** – impossible to attach (container not running)
   322  -   **409** – conflict
   323  -   **500** – server error
   324  
   325  #### Inspect a container
   326  
   327  `GET /containers/(id or name)/json`
   328  
   329  Return low-level information on the container `id`
   330  
   331  **Example request**:
   332  
   333        GET /v1.20/containers/4fa6e0f0c678/json HTTP/1.1
   334  
   335  **Example response**:
   336  
   337      HTTP/1.1 200 OK
   338      Content-Type: application/json
   339  
   340  	{
   341  		"AppArmorProfile": "",
   342  		"Args": [
   343  			"-c",
   344  			"exit 9"
   345  		],
   346  		"Config": {
   347  			"AttachStderr": true,
   348  			"AttachStdin": false,
   349  			"AttachStdout": true,
   350  			"Cmd": [
   351  				"/bin/sh",
   352  				"-c",
   353  				"exit 9"
   354  			],
   355  			"Domainname": "",
   356  			"Entrypoint": null,
   357  			"Env": [
   358  				"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
   359  			],
   360  			"ExposedPorts": null,
   361  			"Hostname": "ba033ac44011",
   362  			"Image": "ubuntu",
   363  			"Labels": {
   364  				"com.example.vendor": "Acme",
   365  				"com.example.license": "GPL",
   366  				"com.example.version": "1.0"
   367  			},
   368  			"MacAddress": "",
   369  			"NetworkDisabled": false,
   370  			"OnBuild": null,
   371  			"OpenStdin": false,
   372  			"StdinOnce": false,
   373  			"Tty": false,
   374  			"User": "",
   375  			"Volumes": null,
   376  			"WorkingDir": ""
   377  		},
   378  		"Created": "2015-01-06T15:47:31.485331387Z",
   379  		"Driver": "devicemapper",
   380  		"ExecDriver": "native-0.2",
   381  		"ExecIDs": null,
   382  		"HostConfig": {
   383  			"Binds": null,
   384  			"BlkioWeight": 0,
   385  			"CapAdd": null,
   386  			"CapDrop": null,
   387  			"ContainerIDFile": "",
   388  			"CpusetCpus": "",
   389  			"CpusetMems": "",
   390  			"CpuShares": 0,
   391  			"CpuPeriod": 100000,
   392  			"Devices": [],
   393  			"Dns": null,
   394  			"DnsSearch": null,
   395  			"ExtraHosts": null,
   396  			"IpcMode": "",
   397  			"Links": null,
   398  			"LxcConf": [],
   399  			"Memory": 0,
   400  			"MemorySwap": 0,
   401  			"OomKillDisable": false,
   402  			"NetworkMode": "bridge",
   403  			"PidMode": "",
   404  			"PortBindings": {},
   405  			"Privileged": false,
   406  			"ReadonlyRootfs": false,
   407  			"PublishAllPorts": false,
   408  			"RestartPolicy": {
   409  				"MaximumRetryCount": 2,
   410  				"Name": "on-failure"
   411  			},
   412  			"LogConfig": {
   413  				"Config": null,
   414  				"Type": "json-file"
   415  			},
   416  			"SecurityOpt": null,
   417  			"VolumesFrom": null,
   418  			"Ulimits": [{}]
   419  		},
   420  		"HostnamePath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname",
   421  		"HostsPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts",
   422  		"LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log",
   423  		"Id": "ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39",
   424  		"Image": "04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2",
   425  		"MountLabel": "",
   426  		"Name": "/boring_euclid",
   427  		"NetworkSettings": {
   428  			"Bridge": "",
   429  			"Gateway": "",
   430  			"IPAddress": "",
   431  			"IPPrefixLen": 0,
   432  			"MacAddress": "",
   433  			"PortMapping": null,
   434  			"Ports": null
   435  		},
   436  		"Path": "/bin/sh",
   437  		"ProcessLabel": "",
   438  		"ResolvConfPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf",
   439  		"RestartCount": 1,
   440  		"State": {
   441  			"Error": "",
   442  			"ExitCode": 9,
   443  			"FinishedAt": "2015-01-06T15:47:32.080254511Z",
   444  			"OOMKilled": false,
   445  			"Paused": false,
   446  			"Pid": 0,
   447  			"Restarting": false,
   448  			"Running": true,
   449  			"StartedAt": "2015-01-06T15:47:32.072697474Z"
   450  		},
   451  		"Mounts": [
   452  			{
   453  				"Source": "/data",
   454  				"Destination": "/data",
   455  				"Mode": "ro,Z",
   456  				"RW": false
   457  			}
   458  		]
   459  	}
   460  
   461  **Status codes**:
   462  
   463  -   **200** – no error
   464  -   **404** – no such container
   465  -   **500** – server error
   466  
   467  #### List processes running inside a container
   468  
   469  `GET /containers/(id or name)/top`
   470  
   471  List processes running inside the container `id`. On Unix systems this
   472  is done by running the `ps` command. This endpoint is not
   473  supported on Windows.
   474  
   475  **Example request**:
   476  
   477      GET /v1.20/containers/4fa6e0f0c678/top HTTP/1.1
   478  
   479  **Example response**:
   480  
   481      HTTP/1.1 200 OK
   482      Content-Type: application/json
   483  
   484      {
   485         "Titles" : [
   486           "UID", "PID", "PPID", "C", "STIME", "TTY", "TIME", "CMD"
   487         ],
   488         "Processes" : [
   489           [
   490             "root", "13642", "882", "0", "17:03", "pts/0", "00:00:00", "/bin/bash"
   491           ],
   492           [
   493             "root", "13735", "13642", "0", "17:06", "pts/0", "00:00:00", "sleep 10"
   494           ]
   495         ]
   496      }
   497  
   498  **Example request**:
   499  
   500      GET /v1.20/containers/4fa6e0f0c678/top?ps_args=aux HTTP/1.1
   501  
   502  **Example response**:
   503  
   504      HTTP/1.1 200 OK
   505      Content-Type: application/json
   506  
   507      {
   508        "Titles" : [
   509          "USER","PID","%CPU","%MEM","VSZ","RSS","TTY","STAT","START","TIME","COMMAND"
   510        ]
   511        "Processes" : [
   512          [
   513            "root","13642","0.0","0.1","18172","3184","pts/0","Ss","17:03","0:00","/bin/bash"
   514          ],
   515          [
   516            "root","13895","0.0","0.0","4348","692","pts/0","S+","17:15","0:00","sleep 10"
   517          ]
   518        ],
   519      }
   520  
   521  **Query parameters**:
   522  
   523  -   **ps_args** – `ps` arguments to use (e.g., `aux`), defaults to `-ef`
   524  
   525  **Status codes**:
   526  
   527  -   **200** – no error
   528  -   **404** – no such container
   529  -   **500** – server error
   530  
   531  #### Get container logs
   532  
   533  `GET /containers/(id or name)/logs`
   534  
   535  Get `stdout` and `stderr` logs from the container ``id``
   536  
   537  > **Note**:
   538  > This endpoint works only for containers with the `json-file` or `journald` logging drivers.
   539  
   540  **Example request**:
   541  
   542       GET /v1.20/containers/4fa6e0f0c678/logs?stderr=1&stdout=1&timestamps=1&follow=1&tail=10&since=1428990821 HTTP/1.1
   543  
   544  **Example response**:
   545  
   546       HTTP/1.1 101 UPGRADED
   547       Content-Type: application/vnd.docker.raw-stream
   548       Connection: Upgrade
   549       Upgrade: tcp
   550  
   551       {% raw %}
   552       {{ STREAM }}
   553       {% endraw %}
   554  
   555  **Query parameters**:
   556  
   557  -   **follow** – 1/True/true or 0/False/false, return stream. Default `false`.
   558  -   **stdout** – 1/True/true or 0/False/false, show `stdout` log. Default `false`.
   559  -   **stderr** – 1/True/true or 0/False/false, show `stderr` log. Default `false`.
   560  -   **since** – UNIX timestamp (integer) to filter logs. Specifying a timestamp
   561      will only output log-entries since that timestamp. Default: 0 (unfiltered)
   562  -   **timestamps** – 1/True/true or 0/False/false, print timestamps for
   563          every log line. Default `false`.
   564  -   **tail** – Output specified number of lines at the end of logs: `all` or `<number>`. Default all.
   565  
   566  **Status codes**:
   567  
   568  -   **101** – no error, hints proxy about hijacking
   569  -   **200** – no error, no upgrade header found
   570  -   **404** – no such container
   571  -   **500** – server error
   572  
   573  #### Inspect changes on a container's filesystem
   574  
   575  `GET /containers/(id or name)/changes`
   576  
   577  Inspect changes on container `id`'s filesystem
   578  
   579  **Example request**:
   580  
   581      GET /v1.20/containers/4fa6e0f0c678/changes HTTP/1.1
   582  
   583  **Example response**:
   584  
   585      HTTP/1.1 200 OK
   586      Content-Type: application/json
   587  
   588      [
   589           {
   590                   "Path": "/dev",
   591                   "Kind": 0
   592           },
   593           {
   594                   "Path": "/dev/kmsg",
   595                   "Kind": 1
   596           },
   597           {
   598                   "Path": "/test",
   599                   "Kind": 1
   600           }
   601      ]
   602  
   603  Values for `Kind`:
   604  
   605  - `0`: Modify
   606  - `1`: Add
   607  - `2`: Delete
   608  
   609  **Status codes**:
   610  
   611  -   **200** – no error
   612  -   **404** – no such container
   613  -   **500** – server error
   614  
   615  #### Export a container
   616  
   617  `GET /containers/(id or name)/export`
   618  
   619  Export the contents of container `id`
   620  
   621  **Example request**:
   622  
   623      GET /v1.20/containers/4fa6e0f0c678/export HTTP/1.1
   624  
   625  **Example response**:
   626  
   627      HTTP/1.1 200 OK
   628      Content-Type: application/octet-stream
   629  
   630      {% raw %}
   631      {{ TAR STREAM }}
   632      {% endraw %}
   633  
   634  **Status codes**:
   635  
   636  -   **200** – no error
   637  -   **404** – no such container
   638  -   **500** – server error
   639  
   640  #### Get container stats based on resource usage
   641  
   642  `GET /containers/(id or name)/stats`
   643  
   644  This endpoint returns a live stream of a container's resource usage statistics.
   645  
   646  **Example request**:
   647  
   648      GET /v1.20/containers/redis1/stats HTTP/1.1
   649  
   650  **Example response**:
   651  
   652        HTTP/1.1 200 OK
   653        Content-Type: application/json
   654  
   655        {
   656           "read" : "2015-01-08T22:57:31.547920715Z",
   657           "network" : {
   658              "rx_dropped" : 0,
   659              "rx_bytes" : 648,
   660              "rx_errors" : 0,
   661              "tx_packets" : 8,
   662              "tx_dropped" : 0,
   663              "rx_packets" : 8,
   664              "tx_errors" : 0,
   665              "tx_bytes" : 648
   666           },
   667           "memory_stats" : {
   668              "stats" : {
   669                 "total_pgmajfault" : 0,
   670                 "cache" : 0,
   671                 "mapped_file" : 0,
   672                 "total_inactive_file" : 0,
   673                 "pgpgout" : 414,
   674                 "rss" : 6537216,
   675                 "total_mapped_file" : 0,
   676                 "writeback" : 0,
   677                 "unevictable" : 0,
   678                 "pgpgin" : 477,
   679                 "total_unevictable" : 0,
   680                 "pgmajfault" : 0,
   681                 "total_rss" : 6537216,
   682                 "total_rss_huge" : 6291456,
   683                 "total_writeback" : 0,
   684                 "total_inactive_anon" : 0,
   685                 "rss_huge" : 6291456,
   686                 "hierarchical_memory_limit" : 67108864,
   687                 "total_pgfault" : 964,
   688                 "total_active_file" : 0,
   689                 "active_anon" : 6537216,
   690                 "total_active_anon" : 6537216,
   691                 "total_pgpgout" : 414,
   692                 "total_cache" : 0,
   693                 "inactive_anon" : 0,
   694                 "active_file" : 0,
   695                 "pgfault" : 964,
   696                 "inactive_file" : 0,
   697                 "total_pgpgin" : 477
   698              },
   699              "max_usage" : 6651904,
   700              "usage" : 6537216,
   701              "failcnt" : 0,
   702              "limit" : 67108864
   703           },
   704           "blkio_stats" : {},
   705           "cpu_stats" : {
   706              "cpu_usage" : {
   707                 "percpu_usage" : [
   708                    8646879,
   709                    24472255,
   710                    36438778,
   711                    30657443
   712                 ],
   713                 "usage_in_usermode" : 50000000,
   714                 "total_usage" : 100215355,
   715                 "usage_in_kernelmode" : 30000000
   716              },
   717              "system_cpu_usage" : 739306590000000,
   718              "throttling_data" : {"periods":0,"throttled_periods":0,"throttled_time":0}
   719           },
   720           "precpu_stats" : {
   721              "cpu_usage" : {
   722                 "percpu_usage" : [
   723                    8646879,
   724                    24350896,
   725                    36438778,
   726                    30657443
   727                 ],
   728                 "usage_in_usermode" : 50000000,
   729                 "total_usage" : 100093996,
   730                 "usage_in_kernelmode" : 30000000
   731              },
   732              "system_cpu_usage" : 9492140000000,
   733              "throttling_data" : {"periods":0,"throttled_periods":0,"throttled_time":0}
   734           }
   735        }
   736  
   737  The precpu_stats is the cpu statistic of last read, which is used for calculating the cpu usage percent. It is not the exact copy of the “cpu_stats” field.
   738  
   739  **Query parameters**:
   740  
   741  -   **stream** – 1/True/true or 0/False/false, pull stats once then disconnect. Default `true`.
   742  
   743  **Status codes**:
   744  
   745  -   **200** – no error
   746  -   **404** – no such container
   747  -   **500** – server error
   748  
   749  #### Resize a container TTY
   750  
   751  `POST /containers/(id or name)/resize?h=<height>&w=<width>`
   752  
   753  Resize the TTY for container with  `id`. You must restart the container for the resize to take effect.
   754  
   755  **Example request**:
   756  
   757        POST /v1.20/containers/4fa6e0f0c678/resize?h=40&w=80 HTTP/1.1
   758  
   759  **Example response**:
   760  
   761        HTTP/1.1 200 OK
   762        Content-Length: 0
   763        Content-Type: text/plain; charset=utf-8
   764  
   765  **Query parameters**:
   766  
   767  -   **h** – height of `tty` session
   768  -   **w** – width
   769  
   770  **Status codes**:
   771  
   772  -   **200** – no error
   773  -   **404** – No such container
   774  -   **500** – Cannot resize container
   775  
   776  #### Start a container
   777  
   778  `POST /containers/(id or name)/start`
   779  
   780  Start the container `id`
   781  
   782  > **Note**:
   783  > For backwards compatibility, this endpoint accepts a `HostConfig` as JSON-encoded request body.
   784  > See [create a container](#create-a-container) for details.
   785  
   786  **Example request**:
   787  
   788      POST /v1.20/containers/e90e34656806/start HTTP/1.1
   789  
   790  **Example response**:
   791  
   792      HTTP/1.1 204 No Content
   793  
   794  **Status codes**:
   795  
   796  -   **204** – no error
   797  -   **304** – container already started
   798  -   **404** – no such container
   799  -   **500** – server error
   800  
   801  #### Stop a container
   802  
   803  `POST /containers/(id or name)/stop`
   804  
   805  Stop the container `id`
   806  
   807  **Example request**:
   808  
   809      POST /v1.20/containers/e90e34656806/stop?t=5 HTTP/1.1
   810  
   811  **Example response**:
   812  
   813      HTTP/1.1 204 No Content
   814  
   815  **Query parameters**:
   816  
   817  -   **t** – number of seconds to wait before killing the container
   818  
   819  **Status codes**:
   820  
   821  -   **204** – no error
   822  -   **304** – container already stopped
   823  -   **404** – no such container
   824  -   **500** – server error
   825  
   826  #### Restart a container
   827  
   828  `POST /containers/(id or name)/restart`
   829  
   830  Restart the container `id`
   831  
   832  **Example request**:
   833  
   834      POST /v1.20/containers/e90e34656806/restart?t=5 HTTP/1.1
   835  
   836  **Example response**:
   837  
   838      HTTP/1.1 204 No Content
   839  
   840  **Query parameters**:
   841  
   842  -   **t** – number of seconds to wait before killing the container
   843  
   844  **Status codes**:
   845  
   846  -   **204** – no error
   847  -   **404** – no such container
   848  -   **500** – server error
   849  
   850  #### Kill a container
   851  
   852  `POST /containers/(id or name)/kill`
   853  
   854  Kill the container `id`
   855  
   856  **Example request**:
   857  
   858      POST /v1.20/containers/e90e34656806/kill HTTP/1.1
   859  
   860  **Example response**:
   861  
   862      HTTP/1.1 204 No Content
   863  
   864  **Query parameters**:
   865  
   866  -   **signal** - Signal to send to the container: integer or string like `SIGINT`.
   867          When not set, `SIGKILL` is assumed and the call waits for the container to exit.
   868  
   869  **Status codes**:
   870  
   871  -   **204** – no error
   872  -   **404** – no such container
   873  -   **500** – server error
   874  
   875  #### Rename a container
   876  
   877  `POST /containers/(id or name)/rename`
   878  
   879  Rename the container `id` to a `new_name`
   880  
   881  **Example request**:
   882  
   883      POST /v1.20/containers/e90e34656806/rename?name=new_name HTTP/1.1
   884  
   885  **Example response**:
   886  
   887      HTTP/1.1 204 No Content
   888  
   889  **Query parameters**:
   890  
   891  -   **name** – new name for the container
   892  
   893  **Status codes**:
   894  
   895  -   **204** – no error
   896  -   **404** – no such container
   897  -   **409** - conflict name already assigned
   898  -   **500** – server error
   899  
   900  #### Pause a container
   901  
   902  `POST /containers/(id or name)/pause`
   903  
   904  Pause the container `id`
   905  
   906  **Example request**:
   907  
   908      POST /v1.20/containers/e90e34656806/pause HTTP/1.1
   909  
   910  **Example response**:
   911  
   912      HTTP/1.1 204 No Content
   913  
   914  **Status codes**:
   915  
   916  -   **204** – no error
   917  -   **404** – no such container
   918  -   **500** – server error
   919  
   920  #### Unpause a container
   921  
   922  `POST /containers/(id or name)/unpause`
   923  
   924  Unpause the container `id`
   925  
   926  **Example request**:
   927  
   928      POST /v1.20/containers/e90e34656806/unpause HTTP/1.1
   929  
   930  **Example response**:
   931  
   932      HTTP/1.1 204 No Content
   933  
   934  **Status codes**:
   935  
   936  -   **204** – no error
   937  -   **404** – no such container
   938  -   **500** – server error
   939  
   940  #### Attach to a container
   941  
   942  `POST /containers/(id or name)/attach`
   943  
   944  Attach to the container `id`
   945  
   946  **Example request**:
   947  
   948      POST /v1.20/containers/16253994b7c4/attach?logs=1&stream=0&stdout=1 HTTP/1.1
   949  
   950  **Example response**:
   951  
   952      HTTP/1.1 101 UPGRADED
   953      Content-Type: application/vnd.docker.raw-stream
   954      Connection: Upgrade
   955      Upgrade: tcp
   956  
   957      {% raw %}
   958      {{ STREAM }}
   959      {% endraw %}
   960  
   961  **Query parameters**:
   962  
   963  -   **logs** – 1/True/true or 0/False/false, return logs. Default `false`.
   964  -   **stream** – 1/True/true or 0/False/false, return stream.
   965          Default `false`.
   966  -   **stdin** – 1/True/true or 0/False/false, if `stream=true`, attach
   967          to `stdin`. Default `false`.
   968  -   **stdout** – 1/True/true or 0/False/false, if `logs=true`, return
   969          `stdout` log, if `stream=true`, attach to `stdout`. Default `false`.
   970  -   **stderr** – 1/True/true or 0/False/false, if `logs=true`, return
   971          `stderr` log, if `stream=true`, attach to `stderr`. Default `false`.
   972  
   973  **Status codes**:
   974  
   975  -   **101** – no error, hints proxy about hijacking
   976  -   **200** – no error, no upgrade header found
   977  -   **400** – bad parameter
   978  -   **404** – no such container
   979  -   **500** – server error
   980  
   981  **Stream details**:
   982  
   983  When using the TTY setting is enabled in
   984  [`POST /containers/create`
   985  ](#create-a-container),
   986  the stream is the raw data from the process PTY and client's `stdin`.
   987  When the TTY is disabled, then the stream is multiplexed to separate
   988  `stdout` and `stderr`.
   989  
   990  The format is a **Header** and a **Payload** (frame).
   991  
   992  **HEADER**
   993  
   994  The header contains the information which the stream writes (`stdout` or
   995  `stderr`). It also contains the size of the associated frame encoded in the
   996  last four bytes (`uint32`).
   997  
   998  It is encoded on the first eight bytes like this:
   999  
  1000      header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}
  1001  
  1002  `STREAM_TYPE` can be:
  1003  
  1004  -   0: `stdin` (is written on `stdout`)
  1005  -   1: `stdout`
  1006  -   2: `stderr`
  1007  
  1008  `SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of
  1009  the `uint32` size encoded as big endian.
  1010  
  1011  **PAYLOAD**
  1012  
  1013  The payload is the raw stream.
  1014  
  1015  **IMPLEMENTATION**
  1016  
  1017  The simplest way to implement the Attach protocol is the following:
  1018  
  1019      1.  Read eight bytes.
  1020      2.  Choose `stdout` or `stderr` depending on the first byte.
  1021      3.  Extract the frame size from the last four bytes.
  1022      4.  Read the extracted size and output it on the correct output.
  1023      5.  Goto 1.
  1024  
  1025  #### Attach to a container (websocket)
  1026  
  1027  `GET /containers/(id or name)/attach/ws`
  1028  
  1029  Attach to the container `id` via websocket
  1030  
  1031  Implements websocket protocol handshake according to [RFC 6455](http://tools.ietf.org/html/rfc6455)
  1032  
  1033  **Example request**
  1034  
  1035      GET /v1.20/containers/e90e34656806/attach/ws?logs=0&stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1
  1036  
  1037  **Example response**
  1038  
  1039      {% raw %}
  1040      {{ STREAM }}
  1041      {% endraw %}
  1042  
  1043  **Query parameters**:
  1044  
  1045  -   **logs** – 1/True/true or 0/False/false, return logs. Default `false`.
  1046  -   **stream** – 1/True/true or 0/False/false, return stream.
  1047          Default `false`.
  1048  -   **stdin** – 1/True/true or 0/False/false, if `stream=true`, attach
  1049          to `stdin`. Default `false`.
  1050  -   **stdout** – 1/True/true or 0/False/false, if `logs=true`, return
  1051          `stdout` log, if `stream=true`, attach to `stdout`. Default `false`.
  1052  -   **stderr** – 1/True/true or 0/False/false, if `logs=true`, return
  1053          `stderr` log, if `stream=true`, attach to `stderr`. Default `false`.
  1054  
  1055  **Status codes**:
  1056  
  1057  -   **200** – no error
  1058  -   **400** – bad parameter
  1059  -   **404** – no such container
  1060  -   **500** – server error
  1061  
  1062  #### Wait a container
  1063  
  1064  `POST /containers/(id or name)/wait`
  1065  
  1066  Block until container `id` stops, then returns the exit code
  1067  
  1068  **Example request**:
  1069  
  1070      POST /v1.20/containers/16253994b7c4/wait HTTP/1.1
  1071  
  1072  **Example response**:
  1073  
  1074      HTTP/1.1 200 OK
  1075      Content-Type: application/json
  1076  
  1077      {"StatusCode": 0}
  1078  
  1079  **Status codes**:
  1080  
  1081  -   **200** – no error
  1082  -   **404** – no such container
  1083  -   **500** – server error
  1084  
  1085  #### Remove a container
  1086  
  1087  `DELETE /containers/(id or name)`
  1088  
  1089  Remove the container `id` from the filesystem
  1090  
  1091  **Example request**:
  1092  
  1093      DELETE /v1.20/containers/16253994b7c4?v=1 HTTP/1.1
  1094  
  1095  **Example response**:
  1096  
  1097      HTTP/1.1 204 No Content
  1098  
  1099  **Query parameters**:
  1100  
  1101  -   **v** – 1/True/true or 0/False/false, Remove the volumes
  1102          associated to the container. Default `false`.
  1103  -   **force** - 1/True/true or 0/False/false, Kill then remove the container.
  1104          Default `false`.
  1105  
  1106  **Status codes**:
  1107  
  1108  -   **204** – no error
  1109  -   **400** – bad parameter
  1110  -   **404** – no such container
  1111  -   **409** – conflict
  1112  -   **500** – server error
  1113  
  1114  #### Copy files or folders from a container
  1115  
  1116  `POST /containers/(id or name)/copy`
  1117  
  1118  Copy files or folders of container `id`
  1119  
  1120  **Deprecated** in favor of the `archive` endpoint below.
  1121  
  1122  **Example request**:
  1123  
  1124      POST /v1.20/containers/4fa6e0f0c678/copy HTTP/1.1
  1125      Content-Type: application/json
  1126  
  1127      {
  1128           "Resource": "test.txt"
  1129      }
  1130  
  1131  **Example response**:
  1132  
  1133      HTTP/1.1 200 OK
  1134      Content-Type: application/x-tar
  1135  
  1136      {% raw %}
  1137      {{ TAR STREAM }}
  1138      {% endraw %}
  1139  
  1140  **Status codes**:
  1141  
  1142  -   **200** – no error
  1143  -   **404** – no such container
  1144  -   **500** – server error
  1145  
  1146  #### Retrieving information about files and folders in a container
  1147  
  1148  `HEAD /containers/(id or name)/archive`
  1149  
  1150  See the description of the `X-Docker-Container-Path-Stat` header in the
  1151  following section.
  1152  
  1153  #### Get an archive of a filesystem resource in a container
  1154  
  1155  `GET /containers/(id or name)/archive`
  1156  
  1157  Get a tar archive of a resource in the filesystem of container `id`.
  1158  
  1159  **Query parameters**:
  1160  
  1161  - **path** - resource in the container's filesystem to archive. Required.
  1162  
  1163      If not an absolute path, it is relative to the container's root directory.
  1164      The resource specified by **path** must exist. To assert that the resource
  1165      is expected to be a directory, **path** should end in `/` or  `/.`
  1166      (assuming a path separator of `/`). If **path** ends in `/.` then this
  1167      indicates that only the contents of the **path** directory should be
  1168      copied. A symlink is always resolved to its target.
  1169  
  1170      > **Note**: It is not possible to copy certain system files such as resources
  1171      > under `/proc`, `/sys`, `/dev`, and mounts created by the user in the
  1172      > container.
  1173  
  1174  **Example request**:
  1175  
  1176      GET /v1.20/containers/8cce319429b2/archive?path=/root HTTP/1.1
  1177  
  1178  **Example response**:
  1179  
  1180      HTTP/1.1 200 OK
  1181      Content-Type: application/x-tar
  1182      X-Docker-Container-Path-Stat: eyJuYW1lIjoicm9vdCIsInNpemUiOjQwOTYsIm1vZGUiOjIxNDc0ODQwOTYsIm10aW1lIjoiMjAxNC0wMi0yN1QyMDo1MToyM1oiLCJsaW5rVGFyZ2V0IjoiIn0=
  1183  
  1184      {% raw %}
  1185      {{ TAR STREAM }}
  1186      {% endraw %}
  1187  
  1188  On success, a response header `X-Docker-Container-Path-Stat` will be set to a
  1189  base64-encoded JSON object containing some filesystem header information about
  1190  the archived resource. The above example value would decode to the following
  1191  JSON object (whitespace added for readability):
  1192  
  1193  ```json
  1194  {
  1195      "name": "root",
  1196      "size": 4096,
  1197      "mode": 2147484096,
  1198      "mtime": "2014-02-27T20:51:23Z",
  1199      "linkTarget": ""
  1200  }
  1201  ```
  1202  
  1203  A `HEAD` request can also be made to this endpoint if only this information is
  1204  desired.
  1205  
  1206  **Status codes**:
  1207  
  1208  - **200** - success, returns archive of copied resource
  1209  - **400** - client error, bad parameter, details in JSON response body, one of:
  1210      - must specify path parameter (**path** cannot be empty)
  1211      - not a directory (**path** was asserted to be a directory but exists as a
  1212        file)
  1213  - **404** - client error, resource not found, one of:
  1214      – no such container (container `id` does not exist)
  1215      - no such file or directory (**path** does not exist)
  1216  - **500** - server error
  1217  
  1218  #### Extract an archive of files or folders to a directory in a container
  1219  
  1220  `PUT /containers/(id or name)/archive`
  1221  
  1222  Upload a tar archive to be extracted to a path in the filesystem of container
  1223  `id`.
  1224  
  1225  **Query parameters**:
  1226  
  1227  - **path** - path to a directory in the container
  1228      to extract the archive's contents into. Required.
  1229  
  1230      If not an absolute path, it is relative to the container's root directory.
  1231      The **path** resource must exist.
  1232  - **noOverwriteDirNonDir** - If "1", "true", or "True" then it will be an error
  1233      if unpacking the given content would cause an existing directory to be
  1234      replaced with a non-directory and vice versa.
  1235  
  1236  **Example request**:
  1237  
  1238      PUT /v1.20/containers/8cce319429b2/archive?path=/vol1 HTTP/1.1
  1239      Content-Type: application/x-tar
  1240  
  1241      {% raw %}
  1242      {{ TAR STREAM }}
  1243      {% endraw %}
  1244  
  1245  **Example response**:
  1246  
  1247      HTTP/1.1 200 OK
  1248  
  1249  **Status codes**:
  1250  
  1251  - **200** – the content was extracted successfully
  1252  - **400** - client error, bad parameter, details in JSON response body, one of:
  1253      - must specify path parameter (**path** cannot be empty)
  1254      - not a directory (**path** should be a directory but exists as a file)
  1255      - unable to overwrite existing directory with non-directory
  1256        (if **noOverwriteDirNonDir**)
  1257      - unable to overwrite existing non-directory with directory
  1258        (if **noOverwriteDirNonDir**)
  1259  - **403** - client error, permission denied, the volume
  1260      or container rootfs is marked as read-only.
  1261  - **404** - client error, resource not found, one of:
  1262      – no such container (container `id` does not exist)
  1263      - no such file or directory (**path** resource does not exist)
  1264  - **500** – server error
  1265  
  1266  ### 2.2 Images
  1267  
  1268  #### List Images
  1269  
  1270  `GET /images/json`
  1271  
  1272  **Example request**:
  1273  
  1274      GET /v1.20/images/json?all=0 HTTP/1.1
  1275  
  1276  **Example response**:
  1277  
  1278      HTTP/1.1 200 OK
  1279      Content-Type: application/json
  1280  
  1281      [
  1282        {
  1283           "RepoTags": [
  1284             "ubuntu:12.04",
  1285             "ubuntu:precise",
  1286             "ubuntu:latest"
  1287           ],
  1288           "Id": "8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c",
  1289           "Created": 1365714795,
  1290           "Size": 131506275,
  1291           "VirtualSize": 131506275,
  1292           "Labels": {}
  1293        },
  1294        {
  1295           "RepoTags": [
  1296             "ubuntu:12.10",
  1297             "ubuntu:quantal"
  1298           ],
  1299           "ParentId": "27cf784147099545",
  1300           "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc",
  1301           "Created": 1364102658,
  1302           "Size": 24653,
  1303           "VirtualSize": 180116135,
  1304           "Labels": {
  1305              "com.example.version": "v1"
  1306           }
  1307        }
  1308      ]
  1309  
  1310  **Example request, with digest information**:
  1311  
  1312      GET /v1.20/images/json?digests=1 HTTP/1.1
  1313  
  1314  **Example response, with digest information**:
  1315  
  1316      HTTP/1.1 200 OK
  1317      Content-Type: application/json
  1318  
  1319      [
  1320        {
  1321          "Created": 1420064636,
  1322          "Id": "4986bf8c15363d1c5d15512d5266f8777bfba4974ac56e3270e7760f6f0a8125",
  1323          "ParentId": "ea13149945cb6b1e746bf28032f02e9b5a793523481a0a18645fc77ad53c4ea2",
  1324          "RepoDigests": [
  1325            "localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf"
  1326          ],
  1327          "RepoTags": [
  1328            "localhost:5000/test/busybox:latest",
  1329            "playdate:latest"
  1330          ],
  1331          "Size": 0,
  1332          "VirtualSize": 2429728,
  1333          "Labels": {}
  1334        }
  1335      ]
  1336  
  1337  The response shows a single image `Id` associated with two repositories
  1338  (`RepoTags`): `localhost:5000/test/busybox`: and `playdate`. A caller can use
  1339  either of the `RepoTags` values `localhost:5000/test/busybox:latest` or
  1340  `playdate:latest` to reference the image.
  1341  
  1342  You can also use `RepoDigests` values to reference an image. In this response,
  1343  the array has only one reference and that is to the
  1344  `localhost:5000/test/busybox` repository; the `playdate` repository has no
  1345  digest. You can reference this digest using the value:
  1346  `localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d...`
  1347  
  1348  See the `docker run` and `docker build` commands for examples of digest and tag
  1349  references on the command line.
  1350  
  1351  **Query parameters**:
  1352  
  1353  -   **all** – 1/True/true or 0/False/false, default false
  1354  -   **filters** – a JSON encoded value of the filters (a map[string][]string) to process on the images list. Available filters:
  1355    -   `dangling=true`
  1356    -   `label=key` or `label="key=value"` of an image label
  1357  -   **filter** - only return images with the specified name
  1358  
  1359  #### Build image from a Dockerfile
  1360  
  1361  `POST /build`
  1362  
  1363  Build an image from a Dockerfile
  1364  
  1365  **Example request**:
  1366  
  1367      POST /v1.20/build HTTP/1.1
  1368  
  1369      {% raw %}
  1370      {{ TAR STREAM }}
  1371      {% endraw %}
  1372  
  1373  **Example response**:
  1374  
  1375      HTTP/1.1 200 OK
  1376      Content-Type: application/json
  1377  
  1378      {"stream": "Step 1/5..."}
  1379      {"stream": "..."}
  1380      {"error": "Error...", "errorDetail": {"code": 123, "message": "Error..."}}
  1381  
  1382  The input stream must be a `tar` archive compressed with one of the
  1383  following algorithms: `identity` (no compression), `gzip`, `bzip2`, `xz`.
  1384  
  1385  The archive must include a build instructions file, typically called
  1386  `Dockerfile` at the archive's root. The `dockerfile` parameter may be
  1387  used to specify a different build instructions file. To do this, its value must be
  1388  the path to the alternate build instructions file to use.
  1389  
  1390  The archive may include any number of other files,
  1391  which are accessible in the build context (See the [*ADD build
  1392  command*](../reference/builder.md#add)).
  1393  
  1394  The Docker daemon performs a preliminary validation of the `Dockerfile` before
  1395  starting the build, and returns an error if the syntax is incorrect. After that,
  1396  each instruction is run one-by-one until the ID of the new image is output.
  1397  
  1398  The build is canceled if the client drops the connection by quitting
  1399  or being killed.
  1400  
  1401  **Query parameters**:
  1402  
  1403  -   **dockerfile** - Path within the build context to the `Dockerfile`. This is
  1404          ignored if `remote` is specified and points to an external `Dockerfile`.
  1405  -   **t** – A name and optional tag to apply to the image in the `name:tag` format.
  1406          If you omit the `tag` the default `latest` value is assumed.
  1407  -   **remote** – A Git repository URI or HTTP/HTTPS context URI. If the
  1408          URI points to a single text file, the file's contents are placed into
  1409          a file called `Dockerfile` and the image is built from that file. If
  1410          the URI points to a tarball, the file is downloaded by the daemon and
  1411          the contents therein used as the context for the build. If the URI
  1412          points to a tarball and the `dockerfile` parameter is also specified,
  1413          there must be a file with the corresponding path inside the tarball.
  1414  -   **q** – Suppress verbose build output.
  1415  -   **nocache** – Do not use the cache when building the image.
  1416  -   **pull** - Attempt to pull the image even if an older image exists locally.
  1417  -   **rm** - Remove intermediate containers after a successful build (default behavior).
  1418  -   **forcerm** - Always remove intermediate containers (includes `rm`).
  1419  -   **memory** - Set memory limit for build.
  1420  -   **memswap** - Total memory (memory + swap), `-1` to enable unlimited swap.
  1421  -   **cpushares** - CPU shares (relative weight).
  1422  -   **cpusetcpus** - CPUs in which to allow execution (e.g., `0-3`, `0,1`).
  1423  -   **cpuperiod** - The length of a CPU period in microseconds.
  1424  -   **cpuquota** - Microseconds of CPU time that the container can get in a CPU period.
  1425  
  1426  **Request Headers**:
  1427  
  1428  -   **Content-type** – Set to `"application/tar"`.
  1429  -   **X-Registry-Config** – A base64-url-safe-encoded Registry Auth Config JSON
  1430          object with the following structure:
  1431  
  1432              {
  1433                  "docker.example.com": {
  1434                      "username": "janedoe",
  1435                      "password": "hunter2"
  1436                  },
  1437                  "https://index.docker.io/v1/": {
  1438                      "username": "mobydock",
  1439                      "password": "conta1n3rize14"
  1440                  }
  1441              }
  1442  
  1443      This object maps the hostname of a registry to an object containing the
  1444      "username" and "password" for that registry. Multiple registries may
  1445      be specified as the build may be based on an image requiring
  1446      authentication to pull from any arbitrary registry. Only the registry
  1447      domain name (and port if not the default "443") are required. However
  1448      (for legacy reasons) the "official" Docker, Inc. hosted registry must
  1449      be specified with both a "https://" prefix and a "/v1/" suffix even
  1450      though Docker will prefer to use the v2 registry API.
  1451  
  1452  **Status codes**:
  1453  
  1454  -   **200** – no error
  1455  -   **500** – server error
  1456  
  1457  #### Create an image
  1458  
  1459  `POST /images/create`
  1460  
  1461  Create an image either by pulling it from the registry or by importing it
  1462  
  1463  **Example request**:
  1464  
  1465      POST /v1.20/images/create?fromImage=busybox&tag=latest HTTP/1.1
  1466  
  1467  **Example response**:
  1468  
  1469      HTTP/1.1 200 OK
  1470      Content-Type: application/json
  1471  
  1472      {"status": "Pulling..."}
  1473      {"status": "Pulling", "progress": "1 B/ 100 B", "progressDetail": {"current": 1, "total": 100}}
  1474      {"error": "Invalid..."}
  1475      ...
  1476  
  1477  When using this endpoint to pull an image from the registry, the
  1478  `X-Registry-Auth` header can be used to include
  1479  a base64-encoded AuthConfig object.
  1480  
  1481  **Query parameters**:
  1482  
  1483  -   **fromImage** – Name of the image to pull.
  1484  -   **fromSrc** – Source to import.  The value may be a URL from which the image
  1485          can be retrieved or `-` to read the image from the request body.
  1486  -   **repo** – Repository name.
  1487  -   **tag** – Tag. If empty when pulling an image, this causes all tags
  1488          for the given image to be pulled.
  1489  
  1490  **Request Headers**:
  1491  
  1492  -   **X-Registry-Auth** – base64-encoded AuthConfig object
  1493  
  1494  **Status codes**:
  1495  
  1496  -   **200** – no error
  1497  -   **404** - repository does not exist or no read access
  1498  -   **500** – server error
  1499  
  1500  
  1501  
  1502  #### Inspect an image
  1503  
  1504  `GET /images/(name)/json`
  1505  
  1506  Return low-level information on the image `name`
  1507  
  1508  **Example request**:
  1509  
  1510      GET /v1.20/images/ubuntu/json HTTP/1.1
  1511  
  1512  **Example response**:
  1513  
  1514      HTTP/1.1 200 OK
  1515      Content-Type: application/json
  1516  
  1517      {
  1518         "Created": "2013-03-23T22:24:18.818426-07:00",
  1519         "Container": "3d67245a8d72ecf13f33dffac9f79dcdf70f75acb84d308770391510e0c23ad0",
  1520         "ContainerConfig": {
  1521            "Hostname": "",
  1522            "User": "",
  1523            "AttachStdin": false,
  1524            "AttachStdout": false,
  1525            "AttachStderr": false,
  1526            "Tty": true,
  1527            "OpenStdin": true,
  1528            "StdinOnce": false,
  1529            "Env": null,
  1530            "Cmd": ["/bin/bash"],
  1531            "Dns": null,
  1532            "Image": "ubuntu",
  1533            "Labels": {
  1534               "com.example.vendor": "Acme",
  1535               "com.example.license": "GPL",
  1536               "com.example.version": "1.0"
  1537            },
  1538            "Volumes": null,
  1539            "VolumesFrom": "",
  1540            "WorkingDir": ""
  1541         },
  1542         "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc",
  1543         "Parent": "27cf784147099545",
  1544         "Size": 6824592
  1545      }
  1546  
  1547  **Status codes**:
  1548  
  1549  -   **200** – no error
  1550  -   **404** – no such image
  1551  -   **500** – server error
  1552  
  1553  #### Get the history of an image
  1554  
  1555  `GET /images/(name)/history`
  1556  
  1557  Return the history of the image `name`
  1558  
  1559  **Example request**:
  1560  
  1561      GET /v1.20/images/ubuntu/history HTTP/1.1
  1562  
  1563  **Example response**:
  1564  
  1565      HTTP/1.1 200 OK
  1566      Content-Type: application/json
  1567  
  1568      [
  1569          {
  1570              "Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710",
  1571              "Created": 1398108230,
  1572              "CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /",
  1573              "Tags": [
  1574                  "ubuntu:lucid",
  1575                  "ubuntu:10.04"
  1576              ],
  1577              "Size": 182964289,
  1578              "Comment": ""
  1579          },
  1580          {
  1581              "Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8",
  1582              "Created": 1398108222,
  1583              "CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi <admwiggin@gmail.com> - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/",
  1584              "Tags": null,
  1585              "Size": 0,
  1586              "Comment": ""
  1587          },
  1588          {
  1589              "Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158",
  1590              "Created": 1371157430,
  1591              "CreatedBy": "",
  1592              "Tags": [
  1593                  "scratch12:latest",
  1594                  "scratch:latest"
  1595              ],
  1596              "Size": 0,
  1597              "Comment": "Imported from -"
  1598          }
  1599      ]
  1600  
  1601  **Status codes**:
  1602  
  1603  -   **200** – no error
  1604  -   **404** – no such image
  1605  -   **500** – server error
  1606  
  1607  #### Push an image on the registry
  1608  
  1609  `POST /images/(name)/push`
  1610  
  1611  Push the image `name` on the registry
  1612  
  1613  **Example request**:
  1614  
  1615      POST /v1.20/images/test/push HTTP/1.1
  1616  
  1617  **Example response**:
  1618  
  1619      HTTP/1.1 200 OK
  1620      Content-Type: application/json
  1621  
  1622      {"status": "Pushing..."}
  1623      {"status": "Pushing", "progress": "1/? (n/a)", "progressDetail": {"current": 1}}}
  1624      {"error": "Invalid..."}
  1625      ...
  1626  
  1627  If you wish to push an image on to a private registry, that image must already have a tag
  1628  into a repository which references that registry `hostname` and `port`.  This repository name should
  1629  then be used in the URL. This duplicates the command line's flow.
  1630  
  1631  **Example request**:
  1632  
  1633      POST /v1.20/images/registry.acme.com:5000/test/push HTTP/1.1
  1634  
  1635  
  1636  **Query parameters**:
  1637  
  1638  -   **tag** – The tag to associate with the image on the registry. This is optional.
  1639  
  1640  **Request Headers**:
  1641  
  1642  -   **X-Registry-Auth** – base64-encoded AuthConfig object.
  1643  
  1644  **Status codes**:
  1645  
  1646  -   **200** – no error
  1647  -   **404** – no such image
  1648  -   **500** – server error
  1649  
  1650  #### Tag an image into a repository
  1651  
  1652  `POST /images/(name)/tag`
  1653  
  1654  Tag the image `name` into a repository
  1655  
  1656  **Example request**:
  1657  
  1658      POST /v1.20/images/test/tag?repo=myrepo&force=0&tag=v42 HTTP/1.1
  1659  
  1660  **Example response**:
  1661  
  1662      HTTP/1.1 201 Created
  1663  
  1664  **Query parameters**:
  1665  
  1666  -   **repo** – The repository to tag in
  1667  -   **force** – 1/True/true or 0/False/false, default false
  1668  -   **tag** - The new tag name
  1669  
  1670  **Status codes**:
  1671  
  1672  -   **201** – no error
  1673  -   **400** – bad parameter
  1674  -   **404** – no such image
  1675  -   **409** – conflict
  1676  -   **500** – server error
  1677  
  1678  #### Remove an image
  1679  
  1680  `DELETE /images/(name)`
  1681  
  1682  Remove the image `name` from the filesystem
  1683  
  1684  **Example request**:
  1685  
  1686      DELETE /v1.20/images/test HTTP/1.1
  1687  
  1688  **Example response**:
  1689  
  1690      HTTP/1.1 200 OK
  1691      Content-type: application/json
  1692  
  1693      [
  1694       {"Untagged": "3e2f21a89f"},
  1695       {"Deleted": "3e2f21a89f"},
  1696       {"Deleted": "53b4f83ac9"}
  1697      ]
  1698  
  1699  **Query parameters**:
  1700  
  1701  -   **force** – 1/True/true or 0/False/false, default false
  1702  -   **noprune** – 1/True/true or 0/False/false, default false
  1703  
  1704  **Status codes**:
  1705  
  1706  -   **200** – no error
  1707  -   **404** – no such image
  1708  -   **409** – conflict
  1709  -   **500** – server error
  1710  
  1711  #### Search images
  1712  
  1713  `GET /images/search`
  1714  
  1715  Search for an image on [Docker Hub](https://hub.docker.com).
  1716  
  1717  > **Note**:
  1718  > The response keys have changed from API v1.6 to reflect the JSON
  1719  > sent by the registry server to the docker daemon's request.
  1720  
  1721  **Example request**:
  1722  
  1723      GET /v1.20/images/search?term=sshd HTTP/1.1
  1724  
  1725  **Example response**:
  1726  
  1727      HTTP/1.1 200 OK
  1728      Content-Type: application/json
  1729  
  1730      [
  1731              {
  1732                  "description": "",
  1733                  "is_official": false,
  1734                  "is_automated": false,
  1735                  "name": "wma55/u1210sshd",
  1736                  "star_count": 0
  1737              },
  1738              {
  1739                  "description": "",
  1740                  "is_official": false,
  1741                  "is_automated": false,
  1742                  "name": "jdswinbank/sshd",
  1743                  "star_count": 0
  1744              },
  1745              {
  1746                  "description": "",
  1747                  "is_official": false,
  1748                  "is_automated": false,
  1749                  "name": "vgauthier/sshd",
  1750                  "star_count": 0
  1751              }
  1752      ...
  1753      ]
  1754  
  1755  **Query parameters**:
  1756  
  1757  -   **term** – term to search
  1758  
  1759  **Status codes**:
  1760  
  1761  -   **200** – no error
  1762  -   **500** – server error
  1763  
  1764  ### 2.3 Misc
  1765  
  1766  #### Check auth configuration
  1767  
  1768  `POST /auth`
  1769  
  1770  Get the default username and email
  1771  
  1772  **Example request**:
  1773  
  1774      POST /v1.20/auth HTTP/1.1
  1775      Content-Type: application/json
  1776  
  1777      {
  1778           "username": "hannibal",
  1779           "password": "xxxx",
  1780           "email": "hannibal@a-team.com",
  1781           "serveraddress": "https://index.docker.io/v1/"
  1782      }
  1783  
  1784  **Example response**:
  1785  
  1786      HTTP/1.1 200 OK
  1787  
  1788  **Status codes**:
  1789  
  1790  -   **200** – no error
  1791  -   **204** – no error
  1792  -   **500** – server error
  1793  
  1794  #### Display system-wide information
  1795  
  1796  `GET /info`
  1797  
  1798  Display system-wide information
  1799  
  1800  **Example request**:
  1801  
  1802      GET /v1.20/info HTTP/1.1
  1803  
  1804  **Example response**:
  1805  
  1806      HTTP/1.1 200 OK
  1807      Content-Type: application/json
  1808  
  1809      {
  1810          "Containers": 11,
  1811          "CpuCfsPeriod": true,
  1812          "CpuCfsQuota": true,
  1813          "Debug": false,
  1814          "DockerRootDir": "/var/lib/docker",
  1815          "Driver": "btrfs",
  1816          "DriverStatus": [[""]],
  1817          "ExecutionDriver": "native-0.1",
  1818          "ExperimentalBuild": false,
  1819          "HttpProxy": "http://test:test@localhost:8080",
  1820          "HttpsProxy": "https://test:test@localhost:8080",
  1821          "ID": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS",
  1822          "IPv4Forwarding": true,
  1823          "Images": 16,
  1824          "IndexServerAddress": "https://index.docker.io/v1/",
  1825          "InitPath": "/usr/bin/docker",
  1826          "InitSha1": "",
  1827          "KernelVersion": "3.12.0-1-amd64",
  1828          "Labels": [
  1829              "storage=ssd"
  1830          ],
  1831          "MemTotal": 2099236864,
  1832          "MemoryLimit": true,
  1833          "NCPU": 1,
  1834          "NEventsListener": 0,
  1835          "NFd": 11,
  1836          "NGoroutines": 21,
  1837          "Name": "prod-server-42",
  1838          "NoProxy": "9.81.1.160",
  1839          "OomKillDisable": true,
  1840          "OperatingSystem": "Boot2Docker",
  1841          "RegistryConfig": {
  1842              "IndexConfigs": {
  1843                  "docker.io": {
  1844                      "Mirrors": null,
  1845                      "Name": "docker.io",
  1846                      "Official": true,
  1847                      "Secure": true
  1848                  }
  1849              },
  1850              "InsecureRegistryCIDRs": [
  1851                  "127.0.0.0/8"
  1852              ]
  1853          },
  1854          "SwapLimit": false,
  1855          "SystemTime": "2015-03-10T11:11:23.730591467-07:00"
  1856      }
  1857  
  1858  **Status codes**:
  1859  
  1860  -   **200** – no error
  1861  -   **500** – server error
  1862  
  1863  #### Show the docker version information
  1864  
  1865  `GET /version`
  1866  
  1867  Show the docker version information
  1868  
  1869  **Example request**:
  1870  
  1871      GET /v1.20/version HTTP/1.1
  1872  
  1873  **Example response**:
  1874  
  1875      HTTP/1.1 200 OK
  1876      Content-Type: application/json
  1877  
  1878      {
  1879           "Version": "1.5.0",
  1880           "Os": "linux",
  1881           "KernelVersion": "3.18.5-tinycore64",
  1882           "GoVersion": "go1.4.1",
  1883           "GitCommit": "a8a31ef",
  1884           "Arch": "amd64",
  1885           "ApiVersion": "1.20",
  1886           "Experimental": false
  1887      }
  1888  
  1889  **Status codes**:
  1890  
  1891  -   **200** – no error
  1892  -   **500** – server error
  1893  
  1894  #### Ping the docker server
  1895  
  1896  `GET /_ping`
  1897  
  1898  Ping the docker server
  1899  
  1900  **Example request**:
  1901  
  1902      GET /v1.20/_ping HTTP/1.1
  1903  
  1904  **Example response**:
  1905  
  1906      HTTP/1.1 200 OK
  1907      Content-Type: text/plain
  1908  
  1909      OK
  1910  
  1911  **Status codes**:
  1912  
  1913  -   **200** - no error
  1914  -   **500** - server error
  1915  
  1916  #### Create a new image from a container's changes
  1917  
  1918  `POST /commit`
  1919  
  1920  Create a new image from a container's changes
  1921  
  1922  **Example request**:
  1923  
  1924      POST /v1.20/commit?container=44c004db4b17&comment=message&repo=myrepo HTTP/1.1
  1925      Content-Type: application/json
  1926  
  1927      {
  1928           "Hostname": "",
  1929           "Domainname": "",
  1930           "User": "",
  1931           "AttachStdin": false,
  1932           "AttachStdout": true,
  1933           "AttachStderr": true,
  1934           "Tty": false,
  1935           "OpenStdin": false,
  1936           "StdinOnce": false,
  1937           "Env": null,
  1938           "Cmd": [
  1939                   "date"
  1940           ],
  1941           "Mounts": [
  1942             {
  1943               "Source": "/data",
  1944               "Destination": "/data",
  1945               "Mode": "ro,Z",
  1946               "RW": false
  1947             }
  1948           ],
  1949           "Labels": {
  1950                   "key1": "value1",
  1951                   "key2": "value2"
  1952            },
  1953           "WorkingDir": "",
  1954           "NetworkDisabled": false,
  1955           "ExposedPorts": {
  1956                   "22/tcp": {}
  1957           }
  1958      }
  1959  
  1960  **Example response**:
  1961  
  1962      HTTP/1.1 201 Created
  1963      Content-Type: application/json
  1964  
  1965      {"Id": "596069db4bf5"}
  1966  
  1967  **JSON parameters**:
  1968  
  1969  -  **config** - the container's configuration
  1970  
  1971  **Query parameters**:
  1972  
  1973  -   **container** – source container
  1974  -   **repo** – repository
  1975  -   **tag** – tag
  1976  -   **comment** – commit message
  1977  -   **author** – author (e.g., "John Hannibal Smith
  1978      <[hannibal@a-team.com](mailto:hannibal%40a-team.com)>")
  1979  -   **pause** – 1/True/true or 0/False/false, whether to pause the container before committing
  1980  -   **changes** – Dockerfile instructions to apply while committing
  1981  
  1982  **Status codes**:
  1983  
  1984  -   **201** – no error
  1985  -   **404** – no such container
  1986  -   **500** – server error
  1987  
  1988  #### Monitor Docker's events
  1989  
  1990  `GET /events`
  1991  
  1992  Get container events from docker, in real time via streaming.
  1993  
  1994  Docker containers report the following events:
  1995  
  1996      attach, commit, copy, create, destroy, die, exec_create, exec_start, export, kill, oom, pause, rename, resize, restart, start, stop, top, unpause
  1997  
  1998  Docker images report the following events:
  1999  
  2000      delete, import, pull, push, tag, untag
  2001  
  2002  **Example request**:
  2003  
  2004      GET /v1.20/events?since=1374067924
  2005  
  2006  **Example response**:
  2007  
  2008      HTTP/1.1 200 OK
  2009      Content-Type: application/json
  2010  
  2011      {"status": "create", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067924}
  2012      {"status": "start", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067924}
  2013      {"status": "stop", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067966}
  2014      {"status": "destroy", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067970}
  2015  
  2016  **Query parameters**:
  2017  
  2018  -   **since** – Timestamp. Show all events created since timestamp and then stream
  2019  -   **until** – Timestamp. Show events created until given timestamp and stop streaming
  2020  -   **filters** – A json encoded value of the filters (a map[string][]string) to process on the event list. Available filters:
  2021    -   `container=<string>`; -- container to filter
  2022    -   `event=<string>`; -- event to filter
  2023    -   `image=<string>`; -- image to filter
  2024  
  2025  **Status codes**:
  2026  
  2027  -   **200** – no error
  2028  -   **500** – server error
  2029  
  2030  #### Get a tarball containing all images in a repository
  2031  
  2032  `GET /images/(name)/get`
  2033  
  2034  Get a tarball containing all images and metadata for the repository specified
  2035  by `name`.
  2036  
  2037  If `name` is a specific name and tag (e.g. ubuntu:latest), then only that image
  2038  (and its parents) are returned. If `name` is an image ID, similarly only that
  2039  image (and its parents) are returned, but with the exclusion of the
  2040  'repositories' file in the tarball, as there were no image names referenced.
  2041  
  2042  See the [image tarball format](#image-tarball-format) for more details.
  2043  
  2044  **Example request**
  2045  
  2046      GET /v1.20/images/ubuntu/get
  2047  
  2048  **Example response**:
  2049  
  2050      HTTP/1.1 200 OK
  2051      Content-Type: application/x-tar
  2052  
  2053      Binary data stream
  2054  
  2055  **Status codes**:
  2056  
  2057  -   **200** – no error
  2058  -   **500** – server error
  2059  
  2060  #### Get a tarball containing all images
  2061  
  2062  `GET /images/get`
  2063  
  2064  Get a tarball containing all images and metadata for one or more repositories.
  2065  
  2066  For each value of the `names` parameter: if it is a specific name and tag (e.g.
  2067  `ubuntu:latest`), then only that image (and its parents) are returned; if it is
  2068  an image ID, similarly only that image (and its parents) are returned and there
  2069  would be no names referenced in the 'repositories' file for this image ID.
  2070  
  2071  See the [image tarball format](#image-tarball-format) for more details.
  2072  
  2073  **Example request**
  2074  
  2075      GET /v1.20/images/get?names=myname%2Fmyapp%3Alatest&names=busybox
  2076  
  2077  **Example response**:
  2078  
  2079      HTTP/1.1 200 OK
  2080      Content-Type: application/x-tar
  2081  
  2082      Binary data stream
  2083  
  2084  **Status codes**:
  2085  
  2086  -   **200** – no error
  2087  -   **500** – server error
  2088  
  2089  #### Load a tarball with a set of images and tags into docker
  2090  
  2091  `POST /images/load`
  2092  
  2093  Load a set of images and tags into a Docker repository.
  2094  See the [image tarball format](#image-tarball-format) for more details.
  2095  
  2096  **Example request**
  2097  
  2098      POST /v1.20/images/load
  2099      Content-Type: application/x-tar
  2100  
  2101      Tarball in body
  2102  
  2103  **Example response**:
  2104  
  2105      HTTP/1.1 200 OK
  2106  
  2107  **Status codes**:
  2108  
  2109  -   **200** – no error
  2110  -   **500** – server error
  2111  
  2112  #### Image tarball format
  2113  
  2114  An image tarball contains one directory per image layer (named using its long ID),
  2115  each containing these files:
  2116  
  2117  - `VERSION`: currently `1.0` - the file format version
  2118  - `json`: detailed layer information, similar to `docker inspect layer_id`
  2119  - `layer.tar`: A tarfile containing the filesystem changes in this layer
  2120  
  2121  The `layer.tar` file contains `aufs` style `.wh..wh.aufs` files and directories
  2122  for storing attribute changes and deletions.
  2123  
  2124  If the tarball defines a repository, the tarball should also include a `repositories` file at
  2125  the root that contains a list of repository and tag names mapped to layer IDs.
  2126  
  2127  ```
  2128  {"hello-world":
  2129      {"latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1"}
  2130  }
  2131  ```
  2132  
  2133  #### Exec Create
  2134  
  2135  `POST /containers/(id or name)/exec`
  2136  
  2137  Sets up an exec instance in a running container `id`
  2138  
  2139  **Example request**:
  2140  
  2141      POST /v1.20/containers/e90e34656806/exec HTTP/1.1
  2142      Content-Type: application/json
  2143  
  2144      {
  2145        "AttachStdin": true,
  2146        "AttachStdout": true,
  2147        "AttachStderr": true,
  2148        "Cmd": ["sh"],
  2149        "Tty": true,
  2150        "User": "123:456"
  2151      }
  2152  
  2153  **Example response**:
  2154  
  2155      HTTP/1.1 201 Created
  2156      Content-Type: application/json
  2157  
  2158      {
  2159           "Id": "f90e34656806",
  2160           "Warnings":[]
  2161      }
  2162  
  2163  **JSON parameters**:
  2164  
  2165  -   **AttachStdin** - Boolean value, attaches to `stdin` of the `exec` command.
  2166  -   **AttachStdout** - Boolean value, attaches to `stdout` of the `exec` command.
  2167  -   **AttachStderr** - Boolean value, attaches to `stderr` of the `exec` command.
  2168  -   **Tty** - Boolean value to allocate a pseudo-TTY.
  2169  -   **Cmd** - Command to run specified as a string or an array of strings.
  2170  -   **User** - A string value specifying the user, and optionally, group to run
  2171          the exec process inside the container. Format is one of: `"user"`,
  2172          `"user:group"`, `"uid"`, or `"uid:gid"`.
  2173  
  2174  **Status codes**:
  2175  
  2176  -   **201** – no error
  2177  -   **404** – no such container
  2178  
  2179  #### Exec Start
  2180  
  2181  `POST /exec/(id)/start`
  2182  
  2183  Starts a previously set up `exec` instance `id`. If `detach` is true, this API
  2184  returns after starting the `exec` command. Otherwise, this API sets up an
  2185  interactive session with the `exec` command.
  2186  
  2187  **Example request**:
  2188  
  2189      POST /v1.20/exec/e90e34656806/start HTTP/1.1
  2190      Content-Type: application/json
  2191  
  2192      {
  2193       "Detach": false,
  2194       "Tty": false
  2195      }
  2196  
  2197  **Example response**:
  2198  
  2199      HTTP/1.1 200 OK
  2200      Content-Type: application/vnd.docker.raw-stream
  2201  
  2202      {% raw %}
  2203      {{ STREAM }}
  2204      {% endraw %}
  2205  
  2206  **JSON parameters**:
  2207  
  2208  -   **Detach** - Detach from the `exec` command.
  2209  -   **Tty** - Boolean value to allocate a pseudo-TTY.
  2210  
  2211  **Status codes**:
  2212  
  2213  -   **200** – no error
  2214  -   **404** – no such exec instance
  2215  
  2216  **Stream details**:
  2217  
  2218  Similar to the stream behavior of `POST /containers/(id or name)/attach` API
  2219  
  2220  #### Exec Resize
  2221  
  2222  `POST /exec/(id)/resize`
  2223  
  2224  Resizes the `tty` session used by the `exec` command `id`.  The unit is number of characters.
  2225  This API is valid only if `tty` was specified as part of creating and starting the `exec` command.
  2226  
  2227  **Example request**:
  2228  
  2229      POST /v1.20/exec/e90e34656806/resize?h=40&w=80 HTTP/1.1
  2230      Content-Type: text/plain
  2231  
  2232  **Example response**:
  2233  
  2234      HTTP/1.1 201 Created
  2235      Content-Type: text/plain
  2236  
  2237  **Query parameters**:
  2238  
  2239  -   **h** – height of `tty` session
  2240  -   **w** – width
  2241  
  2242  **Status codes**:
  2243  
  2244  -   **201** – no error
  2245  -   **404** – no such exec instance
  2246  
  2247  #### Exec Inspect
  2248  
  2249  `GET /exec/(id)/json`
  2250  
  2251  Return low-level information about the `exec` command `id`.
  2252  
  2253  **Example request**:
  2254  
  2255      GET /v1.20/exec/11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39/json HTTP/1.1
  2256  
  2257  **Example response**:
  2258  
  2259      HTTP/1.1 200 OK
  2260      Content-Type: plain/text
  2261  
  2262      {
  2263        "ID" : "11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39",
  2264        "Running" : false,
  2265        "ExitCode" : 2,
  2266        "ProcessConfig" : {
  2267          "privileged" : false,
  2268          "user" : "",
  2269          "tty" : false,
  2270          "entrypoint" : "sh",
  2271          "arguments" : [
  2272            "-c",
  2273            "exit 2"
  2274          ]
  2275        },
  2276        "OpenStdin" : false,
  2277        "OpenStderr" : false,
  2278        "OpenStdout" : false,
  2279        "Container" : {
  2280          "State" : {
  2281            "Running" : true,
  2282            "Paused" : false,
  2283            "Restarting" : false,
  2284            "OOMKilled" : false,
  2285            "Pid" : 3650,
  2286            "ExitCode" : 0,
  2287            "Error" : "",
  2288            "StartedAt" : "2014-11-17T22:26:03.717657531Z",
  2289            "FinishedAt" : "0001-01-01T00:00:00Z"
  2290          },
  2291          "ID" : "8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c",
  2292          "Created" : "2014-11-17T22:26:03.626304998Z",
  2293          "Path" : "date",
  2294          "Args" : [],
  2295          "Config" : {
  2296            "Hostname" : "8f177a186b97",
  2297            "Domainname" : "",
  2298            "User" : "",
  2299            "AttachStdin" : false,
  2300            "AttachStdout" : false,
  2301            "AttachStderr" : false,
  2302            "ExposedPorts" : null,
  2303            "Tty" : false,
  2304            "OpenStdin" : false,
  2305            "StdinOnce" : false,
  2306            "Env" : [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ],
  2307            "Cmd" : [
  2308              "date"
  2309            ],
  2310            "Image" : "ubuntu",
  2311            "Volumes" : null,
  2312            "WorkingDir" : "",
  2313            "Entrypoint" : null,
  2314            "NetworkDisabled" : false,
  2315            "MacAddress" : "",
  2316            "OnBuild" : null,
  2317            "SecurityOpt" : null
  2318          },
  2319          "Image" : "5506de2b643be1e6febbf3b8a240760c6843244c41e12aa2f60ccbb7153d17f5",
  2320          "NetworkSettings" : {
  2321            "IPAddress" : "172.17.0.2",
  2322            "IPPrefixLen" : 16,
  2323            "MacAddress" : "02:42:ac:11:00:02",
  2324            "Gateway" : "172.17.42.1",
  2325            "Bridge" : "docker0",
  2326            "PortMapping" : null,
  2327            "Ports" : {}
  2328          },
  2329          "ResolvConfPath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/resolv.conf",
  2330          "HostnamePath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/hostname",
  2331          "HostsPath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/hosts",
  2332          "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log",
  2333          "Name" : "/test",
  2334          "Driver" : "aufs",
  2335          "ExecDriver" : "native-0.2",
  2336          "MountLabel" : "",
  2337          "ProcessLabel" : "",
  2338          "AppArmorProfile" : "",
  2339          "RestartCount" : 0,
  2340          "Mounts" : []
  2341        }
  2342      }
  2343  
  2344  **Status codes**:
  2345  
  2346  -   **200** – no error
  2347  -   **404** – no such exec instance
  2348  -   **500** - server error
  2349  
  2350  ## 3. Going further
  2351  
  2352  ### 3.1 Inside `docker run`
  2353  
  2354  As an example, the `docker run` command line makes the following API calls:
  2355  
  2356  - Create the container
  2357  
  2358  - If the status code is 404, it means the image doesn't exist:
  2359      - Try to pull it.
  2360      - Then, retry to create the container.
  2361  
  2362  - Start the container.
  2363  
  2364  - If you are not in detached mode:
  2365  - Attach to the container, using `logs=1` (to have `stdout` and
  2366        `stderr` from the container's start) and `stream=1`
  2367  
  2368  - If in detached mode or only `stdin` is attached, display the container's id.
  2369  
  2370  ### 3.2 Hijacking
  2371  
  2372  In this version of the API, `/attach`, uses hijacking to transport `stdin`,
  2373  `stdout`, and `stderr` on the same socket.
  2374  
  2375  To hint potential proxies about connection hijacking, Docker client sends
  2376  connection upgrade headers similarly to websocket.
  2377  
  2378      Upgrade: tcp
  2379      Connection: Upgrade
  2380  
  2381  When Docker daemon detects the `Upgrade` header, it switches its status code
  2382  from **200 OK** to **101 UPGRADED** and resends the same headers.
  2383  
  2384  
  2385  ### 3.3 CORS Requests
  2386  
  2387  To set cross origin requests to the Engine API please give values to
  2388  `--api-cors-header` when running Docker in daemon mode. Set * (asterisk) allows all,
  2389  default or blank means CORS disabled
  2390  
  2391      $ dockerd -H="192.168.1.9:2375" --api-cors-header="http://foo.bar"