github.com/wozhu6104/docker@v20.10.10+incompatible/docs/api/v1.22.md (about)

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