github.com/fabiokung/docker@v0.11.2-0.20170222101415-4534dcd49497/docs/api/v1.21.md (about)

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