github.com/docker/docker@v299999999.0.0-20200612211812-aaf470eca7b5+incompatible/docs/api/v1.24.md (about)

     1  ---
     2  title: "Engine API v1.24"
     3  description: "API Documentation for Docker"
     4  keywords: "API, Docker, rcli, REST, documentation"
     5  redirect_from:
     6  - /engine/reference/api/docker_remote_api_v1.24/
     7  - /reference/api/docker_remote_api_v1.24/
     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. Errors
    35  
    36  The Engine API uses standard HTTP status codes to indicate the success or failure of the API call. The body of the response will be JSON in the following format:
    37  
    38      {
    39          "message": "page not found"
    40      }
    41  
    42  The status codes that are returned for each endpoint are specified in the endpoint documentation below.
    43  
    44  ## 3. Endpoints
    45  
    46  ### 3.1 Containers
    47  
    48  #### List containers
    49  
    50  `GET /containers/json`
    51  
    52  List containers
    53  
    54  **Example request**:
    55  
    56      GET /v1.24/containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1
    57  
    58  **Example response**:
    59  
    60      HTTP/1.1 200 OK
    61      Content-Type: application/json
    62  
    63      [
    64           {
    65                   "Id": "8dfafdbc3a40",
    66                   "Names":["/boring_feynman"],
    67                   "Image": "ubuntu:latest",
    68                   "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82",
    69                   "Command": "echo 1",
    70                   "Created": 1367854155,
    71                   "State": "exited",
    72                   "Status": "Exit 0",
    73                   "Ports": [{"PrivatePort": 2222, "PublicPort": 3333, "Type": "tcp"}],
    74                   "Labels": {
    75                           "com.example.vendor": "Acme",
    76                           "com.example.license": "GPL",
    77                           "com.example.version": "1.0"
    78                   },
    79                   "SizeRw": 12288,
    80                   "SizeRootFs": 0,
    81                   "HostConfig": {
    82                           "NetworkMode": "default"
    83                   },
    84                   "NetworkSettings": {
    85                           "Networks": {
    86                                   "bridge": {
    87                                            "IPAMConfig": null,
    88                                            "Links": null,
    89                                            "Aliases": null,
    90                                            "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812",
    91                                            "EndpointID": "2cdc4edb1ded3631c81f57966563e5c8525b81121bb3706a9a9a3ae102711f3f",
    92                                            "Gateway": "172.17.0.1",
    93                                            "IPAddress": "172.17.0.2",
    94                                            "IPPrefixLen": 16,
    95                                            "IPv6Gateway": "",
    96                                            "GlobalIPv6Address": "",
    97                                            "GlobalIPv6PrefixLen": 0,
    98                                            "MacAddress": "02:42:ac:11:00:02"
    99                                    }
   100                           }
   101                   },
   102                   "Mounts": [
   103                           {
   104                                    "Name": "fac362...80535",
   105                                    "Source": "/data",
   106                                    "Destination": "/data",
   107                                    "Driver": "local",
   108                                    "Mode": "ro,Z",
   109                                    "RW": false,
   110                                    "Propagation": ""
   111                           }
   112                   ]
   113           },
   114           {
   115                   "Id": "9cd87474be90",
   116                   "Names":["/coolName"],
   117                   "Image": "ubuntu:latest",
   118                   "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82",
   119                   "Command": "echo 222222",
   120                   "Created": 1367854155,
   121                   "State": "exited",
   122                   "Status": "Exit 0",
   123                   "Ports": [],
   124                   "Labels": {},
   125                   "SizeRw": 12288,
   126                   "SizeRootFs": 0,
   127                   "HostConfig": {
   128                           "NetworkMode": "default"
   129                   },
   130                   "NetworkSettings": {
   131                           "Networks": {
   132                                   "bridge": {
   133                                            "IPAMConfig": null,
   134                                            "Links": null,
   135                                            "Aliases": null,
   136                                            "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812",
   137                                            "EndpointID": "88eaed7b37b38c2a3f0c4bc796494fdf51b270c2d22656412a2ca5d559a64d7a",
   138                                            "Gateway": "172.17.0.1",
   139                                            "IPAddress": "172.17.0.8",
   140                                            "IPPrefixLen": 16,
   141                                            "IPv6Gateway": "",
   142                                            "GlobalIPv6Address": "",
   143                                            "GlobalIPv6PrefixLen": 0,
   144                                            "MacAddress": "02:42:ac:11:00:08"
   145                                    }
   146                           }
   147                   },
   148                   "Mounts": []
   149           },
   150           {
   151                   "Id": "3176a2479c92",
   152                   "Names":["/sleepy_dog"],
   153                   "Image": "ubuntu:latest",
   154                   "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82",
   155                   "Command": "echo 3333333333333333",
   156                   "Created": 1367854154,
   157                   "State": "exited",
   158                   "Status": "Exit 0",
   159                   "Ports":[],
   160                   "Labels": {},
   161                   "SizeRw":12288,
   162                   "SizeRootFs":0,
   163                   "HostConfig": {
   164                           "NetworkMode": "default"
   165                   },
   166                   "NetworkSettings": {
   167                           "Networks": {
   168                                   "bridge": {
   169                                            "IPAMConfig": null,
   170                                            "Links": null,
   171                                            "Aliases": null,
   172                                            "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812",
   173                                            "EndpointID": "8b27c041c30326d59cd6e6f510d4f8d1d570a228466f956edf7815508f78e30d",
   174                                            "Gateway": "172.17.0.1",
   175                                            "IPAddress": "172.17.0.6",
   176                                            "IPPrefixLen": 16,
   177                                            "IPv6Gateway": "",
   178                                            "GlobalIPv6Address": "",
   179                                            "GlobalIPv6PrefixLen": 0,
   180                                            "MacAddress": "02:42:ac:11:00:06"
   181                                    }
   182                           }
   183                   },
   184                   "Mounts": []
   185           },
   186           {
   187                   "Id": "4cb07b47f9fb",
   188                   "Names":["/running_cat"],
   189                   "Image": "ubuntu:latest",
   190                   "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82",
   191                   "Command": "echo 444444444444444444444444444444444",
   192                   "Created": 1367854152,
   193                   "State": "exited",
   194                   "Status": "Exit 0",
   195                   "Ports": [],
   196                   "Labels": {},
   197                   "SizeRw": 12288,
   198                   "SizeRootFs": 0,
   199                   "HostConfig": {
   200                           "NetworkMode": "default"
   201                   },
   202                   "NetworkSettings": {
   203                           "Networks": {
   204                                   "bridge": {
   205                                            "IPAMConfig": null,
   206                                            "Links": null,
   207                                            "Aliases": null,
   208                                            "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812",
   209                                            "EndpointID": "d91c7b2f0644403d7ef3095985ea0e2370325cd2332ff3a3225c4247328e66e9",
   210                                            "Gateway": "172.17.0.1",
   211                                            "IPAddress": "172.17.0.5",
   212                                            "IPPrefixLen": 16,
   213                                            "IPv6Gateway": "",
   214                                            "GlobalIPv6Address": "",
   215                                            "GlobalIPv6PrefixLen": 0,
   216                                            "MacAddress": "02:42:ac:11:00:05"
   217                                    }
   218                           }
   219                   },
   220                   "Mounts": []
   221           }
   222      ]
   223  
   224  **Query parameters**:
   225  
   226  -   **all** – 1/True/true or 0/False/false, Show all containers.
   227          Only running containers are shown by default (i.e., this defaults to false)
   228  -   **limit** – Show `limit` last created
   229          containers, include non-running ones.
   230  -   **since** – Show only containers created since Id, include
   231          non-running ones.
   232  -   **before** – Show only containers created before Id, include
   233          non-running ones.
   234  -   **size** – 1/True/true or 0/False/false, Show the containers
   235          sizes
   236  -   **filters** - a JSON encoded value of the filters (a `map[string][]string`) to process on the containers list. Available filters:
   237    -   `exited=<int>`; -- containers with exit code of  `<int>` ;
   238    -   `status=`(`created`|`restarting`|`running`|`paused`|`exited`|`dead`)
   239    -   `label=key` or `label="key=value"` of a container label
   240    -   `isolation=`(`default`|`process`|`hyperv`)   (Windows daemon only)
   241    -   `ancestor`=(`<image-name>[:<tag>]`,  `<image id>` or `<image@digest>`)
   242    -   `before`=(`<container id>` or `<container name>`)
   243    -   `since`=(`<container id>` or `<container name>`)
   244    -   `volume`=(`<volume name>` or `<mount point destination>`)
   245    -   `network`=(`<network id>` or `<network name>`)
   246  
   247  **Status codes**:
   248  
   249  -   **200** – no error
   250  -   **400** – bad parameter
   251  -   **500** – server error
   252  
   253  #### Create a container
   254  
   255  `POST /containers/create`
   256  
   257  Create a container
   258  
   259  **Example request**:
   260  
   261      POST /v1.24/containers/create HTTP/1.1
   262      Content-Type: application/json
   263      Content-Length: 12345
   264  
   265      {
   266             "Hostname": "",
   267             "Domainname": "",
   268             "User": "",
   269             "AttachStdin": false,
   270             "AttachStdout": true,
   271             "AttachStderr": true,
   272             "Tty": false,
   273             "OpenStdin": false,
   274             "StdinOnce": false,
   275             "Env": [
   276                     "FOO=bar",
   277                     "BAZ=quux"
   278             ],
   279             "Cmd": [
   280                     "date"
   281             ],
   282             "Entrypoint": "",
   283             "Image": "ubuntu",
   284             "Labels": {
   285                     "com.example.vendor": "Acme",
   286                     "com.example.license": "GPL",
   287                     "com.example.version": "1.0"
   288             },
   289             "Volumes": {
   290               "/volumes/data": {}
   291             },
   292             "Healthcheck":{
   293                "Test": ["CMD-SHELL", "curl localhost:3000"],
   294                "Interval": 1000000000,
   295                "Timeout": 10000000000,
   296                "Retries": 10,
   297                "StartPeriod": 60000000000
   298             },
   299             "WorkingDir": "",
   300             "NetworkDisabled": false,
   301             "MacAddress": "12:34:56:78:9a:bc",
   302             "ExposedPorts": {
   303                     "22/tcp": {}
   304             },
   305             "StopSignal": "SIGTERM",
   306             "HostConfig": {
   307               "Binds": ["/tmp:/tmp"],
   308               "Tmpfs": { "/run": "rw,noexec,nosuid,size=65536k" },
   309               "Links": ["redis3:redis"],
   310               "Memory": 0,
   311               "MemorySwap": 0,
   312               "MemoryReservation": 0,
   313               "KernelMemory": 0,
   314               "CpuPercent": 80,
   315               "CpuShares": 512,
   316               "CpuPeriod": 100000,
   317               "CpuQuota": 50000,
   318               "CpusetCpus": "0,1",
   319               "CpusetMems": "0,1",
   320               "IOMaximumBandwidth": 0,
   321               "IOMaximumIOps": 0,
   322               "BlkioWeight": 300,
   323               "BlkioWeightDevice": [{}],
   324               "BlkioDeviceReadBps": [{}],
   325               "BlkioDeviceReadIOps": [{}],
   326               "BlkioDeviceWriteBps": [{}],
   327               "BlkioDeviceWriteIOps": [{}],
   328               "MemorySwappiness": 60,
   329               "OomKillDisable": false,
   330               "OomScoreAdj": 500,
   331               "PidMode": "",
   332               "PidsLimit": -1,
   333               "PortBindings": { "22/tcp": [{ "HostPort": "11022" }] },
   334               "PublishAllPorts": false,
   335               "Privileged": false,
   336               "ReadonlyRootfs": false,
   337               "Dns": ["8.8.8.8"],
   338               "DnsOptions": [""],
   339               "DnsSearch": [""],
   340               "ExtraHosts": null,
   341               "VolumesFrom": ["parent", "other:ro"],
   342               "CapAdd": ["NET_ADMIN"],
   343               "CapDrop": ["MKNOD"],
   344               "GroupAdd": ["newgroup"],
   345               "RestartPolicy": { "Name": "", "MaximumRetryCount": 0 },
   346               "NetworkMode": "bridge",
   347               "Devices": [],
   348               "Sysctls": { "net.ipv4.ip_forward": "1" },
   349               "Ulimits": [{}],
   350               "LogConfig": { "Type": "json-file", "Config": {} },
   351               "SecurityOpt": [],
   352               "StorageOpt": {},
   353               "CgroupParent": "",
   354               "VolumeDriver": "",
   355               "ShmSize": 67108864
   356            },
   357            "NetworkingConfig": {
   358                "EndpointsConfig": {
   359                    "isolated_nw" : {
   360                        "IPAMConfig": {
   361                            "IPv4Address":"172.20.30.33",
   362                            "IPv6Address":"2001:db8:abcd::3033",
   363                            "LinkLocalIPs":["169.254.34.68", "fe80::3468"]
   364                        },
   365                        "Links":["container_1", "container_2"],
   366                        "Aliases":["server_x", "server_y"]
   367                    }
   368                }
   369            }
   370        }
   371  
   372  **Example response**:
   373  
   374        HTTP/1.1 201 Created
   375        Content-Type: application/json
   376  
   377        {
   378             "Id":"e90e34656806",
   379             "Warnings":[]
   380        }
   381  
   382  **JSON parameters**:
   383  
   384  -   **Hostname** - A string value containing the hostname to use for the
   385        container. This must be a valid RFC 1123 hostname.
   386  -   **Domainname** - A string value containing the domain name to use
   387        for the container.
   388  -   **User** - A string value specifying the user inside the container.
   389  -   **AttachStdin** - Boolean value, attaches to `stdin`.
   390  -   **AttachStdout** - Boolean value, attaches to `stdout`.
   391  -   **AttachStderr** - Boolean value, attaches to `stderr`.
   392  -   **Tty** - Boolean value, Attach standard streams to a `tty`, including `stdin` if it is not closed.
   393  -   **OpenStdin** - Boolean value, opens `stdin`,
   394  -   **StdinOnce** - Boolean value, close `stdin` after the 1 attached client disconnects.
   395  -   **Env** - A list of environment variables in the form of `["VAR=value", ...]`
   396  -   **Labels** - Adds a map of labels to a container. To specify a map: `{"key":"value", ... }`
   397  -   **Cmd** - Command to run specified as a string or an array of strings.
   398  -   **Entrypoint** - Set the entry point for the container as a string or an array
   399        of strings.
   400  -   **Image** - A string specifying the image name to use for the container.
   401  -   **Volumes** - An object mapping mount point paths (strings) inside the
   402        container to empty objects.
   403  -   **Healthcheck** - A test to perform to check that the container is healthy.
   404      -     **Test** - The test to perform. Possible values are:
   405                + `{}` inherit healthcheck from image or parent image
   406                + `{"NONE"}` disable healthcheck
   407                + `{"CMD", args...}` exec arguments directly
   408                + `{"CMD-SHELL", command}` run command with system's default shell
   409      -     **Interval** - The time to wait between checks in nanoseconds. It should be 0 or at least 1000000 (1 ms). 0 means inherit.
   410      -     **Timeout** - The time to wait before considering the check to have hung. It should be 0 or at least 1000000 (1 ms). 0 means inherit.
   411      -     **Retries** - The number of consecutive failures needed to consider a container as unhealthy. 0 means inherit.
   412      -     **StartPeriod** - The time to wait for container initialization before starting health-retries countdown in nanoseconds. It should be 0 or at least 1000000 (1 ms). 0 means inherit.
   413  -   **WorkingDir** - A string specifying the working directory for commands to
   414        run in.
   415  -   **NetworkDisabled** - Boolean value, when true disables networking for the
   416        container
   417  -   **ExposedPorts** - An object mapping ports to an empty object in the form of:
   418        `"ExposedPorts": { "<port>/<tcp|udp>: {}" }`
   419  -   **StopSignal** - Signal to stop a container as a string or unsigned integer. `SIGTERM` by default.
   420  -   **HostConfig**
   421      -   **Binds** – A list of volume bindings for this container. Each volume binding is a string in one of these forms:
   422             + `host-src:container-dest` to bind-mount a host path into the
   423               container. Both `host-src`, and `container-dest` must be an
   424               _absolute_ path.
   425             + `host-src:container-dest:ro` to make the bind mount read-only
   426               inside the container. Both `host-src`, and `container-dest` must be
   427               an _absolute_ path.
   428             + `volume-name:container-dest` to bind-mount a volume managed by a
   429               volume driver into the container. `container-dest` must be an
   430               _absolute_ path.
   431             + `volume-name:container-dest:ro` to mount the volume read-only
   432               inside the container.  `container-dest` must be an _absolute_ path.
   433      -   **Tmpfs** – A map of container directories which should be replaced by tmpfs mounts, and their corresponding
   434            mount options. A JSON object in the form `{ "/run": "rw,noexec,nosuid,size=65536k" }`.
   435      -   **Links** - A list of links for the container. Each link entry should be
   436            in the form of `container_name:alias`.
   437      -   **Memory** - Memory limit in bytes.
   438      -   **MemorySwap** - Total memory limit (memory + swap); set `-1` to enable unlimited swap.
   439            You must use this with `memory` and make the swap value larger than `memory`.
   440      -   **MemoryReservation** - Memory soft limit in bytes.
   441      -   **KernelMemory** - Kernel memory limit in bytes.
   442      -   **CpuPercent** - An integer value containing the usable percentage of the available CPUs. (Windows daemon only)
   443      -   **CpuShares** - An integer value containing the container's CPU Shares
   444            (ie. the relative weight vs other containers).
   445      -   **CpuPeriod** - The length of a CPU period in microseconds.
   446      -   **CpuQuota** - Microseconds of CPU time that the container can get in a CPU period.
   447      -   **CpusetCpus** - String value containing the `cgroups CpusetCpus` to use.
   448      -   **CpusetMems** - Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems.
   449      -   **IOMaximumBandwidth** - Maximum IO absolute rate in terms of IOps.
   450      -   **IOMaximumIOps** - Maximum IO absolute rate in terms of bytes per second.
   451      -   **BlkioWeight** - Block IO weight (relative weight) accepts a weight value between 10 and 1000.
   452      -   **BlkioWeightDevice** - Block IO weight (relative device weight) in the form of:        `"BlkioWeightDevice": [{"Path": "device_path", "Weight": weight}]`
   453      -   **BlkioDeviceReadBps** - Limit read rate (bytes per second) from a device in the form of:	`"BlkioDeviceReadBps": [{"Path": "device_path", "Rate": rate}]`, for example:
   454          `"BlkioDeviceReadBps": [{"Path": "/dev/sda", "Rate": "1024"}]"`
   455      -   **BlkioDeviceWriteBps** - Limit write rate (bytes per second) to a device in the form of:	`"BlkioDeviceWriteBps": [{"Path": "device_path", "Rate": rate}]`, for example:
   456          `"BlkioDeviceWriteBps": [{"Path": "/dev/sda", "Rate": "1024"}]"`
   457      -   **BlkioDeviceReadIOps** - Limit read rate (IO per second) from a device in the form of:	`"BlkioDeviceReadIOps": [{"Path": "device_path", "Rate": rate}]`, for example:
   458          `"BlkioDeviceReadIOps": [{"Path": "/dev/sda", "Rate": "1000"}]`
   459      -   **BlkioDeviceWriteIOps** - Limit write rate (IO per second) to a device in the form of:	`"BlkioDeviceWriteIOps": [{"Path": "device_path", "Rate": rate}]`, for example:
   460          `"BlkioDeviceWriteIOps": [{"Path": "/dev/sda", "Rate": "1000"}]`
   461      -   **MemorySwappiness** - Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100.
   462      -   **OomKillDisable** - Boolean value, whether to disable OOM Killer for the container or not.
   463      -   **OomScoreAdj** - An integer value containing the score given to the container in order to tune OOM killer preferences.
   464      -   **PidMode** - Set the PID (Process) Namespace mode for the container;
   465            `"container:<name|id>"`: joins another container's PID namespace
   466            `"host"`: use the host's PID namespace inside the container
   467      -   **PidsLimit** - Tune a container's pids limit. Set -1 for unlimited.
   468      -   **PortBindings** - A map of exposed container ports and the host port they
   469            should map to. A JSON object in the form
   470            `{ <port>/<protocol>: [{ "HostPort": "<port>" }] }`
   471            Take note that `port` is specified as a string and not an integer value.
   472      -   **PublishAllPorts** - Allocates an ephemeral host port for all of a container's
   473            exposed ports. Specified as a boolean value.
   474  
   475            Ports are de-allocated when the container stops and allocated when the container starts.
   476            The allocated port might be changed when restarting the container.
   477  
   478            The port is selected from the ephemeral port range that depends on the kernel.
   479            For example, on Linux the range is defined by `/proc/sys/net/ipv4/ip_local_port_range`.
   480      -   **Privileged** - Gives the container full access to the host. Specified as
   481            a boolean value.
   482      -   **ReadonlyRootfs** - Mount the container's root filesystem as read only.
   483            Specified as a boolean value.
   484      -   **Dns** - A list of DNS servers for the container to use.
   485      -   **DnsOptions** - A list of DNS options
   486      -   **DnsSearch** - A list of DNS search domains
   487      -   **ExtraHosts** - A list of hostnames/IP mappings to add to the
   488          container's `/etc/hosts` file. Specified in the form `["hostname:IP"]`.
   489      -   **VolumesFrom** - A list of volumes to inherit from another container.
   490            Specified in the form `<container name>[:<ro|rw>]`
   491      -   **CapAdd** - A list of kernel capabilities to add to the container.
   492      -   **Capdrop** - A list of kernel capabilities to drop from the container.
   493      -   **GroupAdd** - A list of additional groups that the container process will run as
   494      -   **RestartPolicy** – The behavior to apply when the container exits.  The
   495              value is an object with a `Name` property of either `"always"` to
   496              always restart, `"unless-stopped"` to restart always except when
   497              user has manually stopped the container or `"on-failure"` to restart only when the container
   498              exit code is non-zero.  If `on-failure` is used, `MaximumRetryCount`
   499              controls the number of times to retry before giving up.
   500              The default is not to restart. (optional)
   501              An ever increasing delay (double the previous delay, starting at 100mS)
   502              is added before each restart to prevent flooding the server.
   503      -   **UsernsMode**  - Sets the usernamespace mode for the container when usernamespace remapping option is enabled.
   504             supported values are: `host`.
   505      -   **NetworkMode** - Sets the networking mode for the container. Supported
   506            standard values are: `bridge`, `host`, `none`, and `container:<name|id>`. Any other value is taken
   507            as a custom network's name to which this container should connect to.
   508      -   **Devices** - A list of devices to add to the container specified as a JSON object in the
   509        form
   510            `{ "PathOnHost": "/dev/deviceName", "PathInContainer": "/dev/deviceName", "CgroupPermissions": "mrw"}`
   511      -   **Ulimits** - A list of ulimits to set in the container, specified as
   512            `{ "Name": <name>, "Soft": <soft limit>, "Hard": <hard limit> }`, for example:
   513            `Ulimits: { "Name": "nofile", "Soft": 1024, "Hard": 2048 }`
   514      -   **Sysctls** - A list of kernel parameters (sysctls) to set in the container, specified as
   515            `{ <name>: <Value> }`, for example:
   516  	  `{ "net.ipv4.ip_forward": "1" }`
   517      -   **SecurityOpt**: A list of string values to customize labels for MLS
   518          systems, such as SELinux.
   519      -   **StorageOpt**: Storage driver options per container. Options can be passed in the form
   520          `{"size":"120G"}`
   521      -   **LogConfig** - Log configuration for the container, specified as a JSON object in the form
   522            `{ "Type": "<driver_name>", "Config": {"key1": "val1"}}`.
   523            Available types: `json-file`, `syslog`, `journald`, `gelf`, `fluentd`, `awslogs`, `splunk`, `etwlogs`, `none`.
   524            `json-file` logging driver.
   525      -   **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.
   526      -   **VolumeDriver** - Driver that this container users to mount volumes.
   527      -   **ShmSize** - Size of `/dev/shm` in bytes. The size must be greater than 0.  If omitted the system uses 64MB.
   528  
   529  **Query parameters**:
   530  
   531  -   **name** – Assign the specified name to the container. Must
   532      match `/?[a-zA-Z0-9_-]+`.
   533  
   534  **Status codes**:
   535  
   536  -   **201** – no error
   537  -   **400** – bad parameter
   538  -   **404** – no such container
   539  -   **406** – impossible to attach (container not running)
   540  -   **409** – conflict
   541  -   **500** – server error
   542  
   543  #### Inspect a container
   544  
   545  `GET /containers/(id or name)/json`
   546  
   547  Return low-level information on the container `id`
   548  
   549  **Example request**:
   550  
   551        GET /v1.24/containers/4fa6e0f0c678/json HTTP/1.1
   552  
   553  **Example response**:
   554  
   555      HTTP/1.1 200 OK
   556      Content-Type: application/json
   557  
   558  	{
   559  		"AppArmorProfile": "",
   560  		"Args": [
   561  			"-c",
   562  			"exit 9"
   563  		],
   564  		"Config": {
   565  			"AttachStderr": true,
   566  			"AttachStdin": false,
   567  			"AttachStdout": true,
   568  			"Cmd": [
   569  				"/bin/sh",
   570  				"-c",
   571  				"exit 9"
   572  			],
   573  			"Domainname": "",
   574  			"Entrypoint": null,
   575  			"Env": [
   576  				"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
   577  			],
   578  			"ExposedPorts": null,
   579  			"Hostname": "ba033ac44011",
   580  			"Image": "ubuntu",
   581  			"Labels": {
   582  				"com.example.vendor": "Acme",
   583  				"com.example.license": "GPL",
   584  				"com.example.version": "1.0"
   585  			},
   586  			"MacAddress": "",
   587  			"NetworkDisabled": false,
   588  			"OnBuild": null,
   589  			"OpenStdin": false,
   590  			"StdinOnce": false,
   591  			"Tty": false,
   592  			"User": "",
   593  			"Volumes": {
   594  				"/volumes/data": {}
   595  			},
   596  			"WorkingDir": "",
   597  			"StopSignal": "SIGTERM"
   598  		},
   599  		"Created": "2015-01-06T15:47:31.485331387Z",
   600  		"Driver": "devicemapper",
   601  		"ExecIDs": null,
   602  		"HostConfig": {
   603  			"Binds": null,
   604  			"IOMaximumBandwidth": 0,
   605  			"IOMaximumIOps": 0,
   606  			"BlkioWeight": 0,
   607  			"BlkioWeightDevice": [{}],
   608  			"BlkioDeviceReadBps": [{}],
   609  			"BlkioDeviceWriteBps": [{}],
   610  			"BlkioDeviceReadIOps": [{}],
   611  			"BlkioDeviceWriteIOps": [{}],
   612  			"CapAdd": null,
   613  			"CapDrop": null,
   614  			"ContainerIDFile": "",
   615  			"CpusetCpus": "",
   616  			"CpusetMems": "",
   617  			"CpuPercent": 80,
   618  			"CpuShares": 0,
   619  			"CpuPeriod": 100000,
   620  			"Devices": [],
   621  			"Dns": null,
   622  			"DnsOptions": null,
   623  			"DnsSearch": null,
   624  			"ExtraHosts": null,
   625  			"IpcMode": "",
   626  			"Links": null,
   627  			"LxcConf": [],
   628  			"Memory": 0,
   629  			"MemorySwap": 0,
   630  			"MemoryReservation": 0,
   631  			"KernelMemory": 0,
   632  			"OomKillDisable": false,
   633  			"OomScoreAdj": 500,
   634  			"NetworkMode": "bridge",
   635  			"PidMode": "",
   636  			"PortBindings": {},
   637  			"Privileged": false,
   638  			"ReadonlyRootfs": false,
   639  			"PublishAllPorts": false,
   640  			"RestartPolicy": {
   641  				"MaximumRetryCount": 2,
   642  				"Name": "on-failure"
   643  			},
   644  			"LogConfig": {
   645  				"Config": null,
   646  				"Type": "json-file"
   647  			},
   648  			"SecurityOpt": null,
   649  			"Sysctls": {
   650  			        "net.ipv4.ip_forward": "1"
   651  			},
   652  			"StorageOpt": null,
   653  			"VolumesFrom": null,
   654  			"Ulimits": [{}],
   655  			"VolumeDriver": "",
   656  			"ShmSize": 67108864
   657  		},
   658  		"HostnamePath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname",
   659  		"HostsPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts",
   660  		"LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log",
   661  		"Id": "ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39",
   662  		"Image": "04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2",
   663  		"MountLabel": "",
   664  		"Name": "/boring_euclid",
   665  		"NetworkSettings": {
   666  			"Bridge": "",
   667  			"SandboxID": "",
   668  			"HairpinMode": false,
   669  			"LinkLocalIPv6Address": "",
   670  			"LinkLocalIPv6PrefixLen": 0,
   671  			"Ports": null,
   672  			"SandboxKey": "",
   673  			"SecondaryIPAddresses": null,
   674  			"SecondaryIPv6Addresses": null,
   675  			"EndpointID": "",
   676  			"Gateway": "",
   677  			"GlobalIPv6Address": "",
   678  			"GlobalIPv6PrefixLen": 0,
   679  			"IPAddress": "",
   680  			"IPPrefixLen": 0,
   681  			"IPv6Gateway": "",
   682  			"MacAddress": "",
   683  			"Networks": {
   684  				"bridge": {
   685  					"NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812",
   686  					"EndpointID": "7587b82f0dada3656fda26588aee72630c6fab1536d36e394b2bfbcf898c971d",
   687  					"Gateway": "172.17.0.1",
   688  					"IPAddress": "172.17.0.2",
   689  					"IPPrefixLen": 16,
   690  					"IPv6Gateway": "",
   691  					"GlobalIPv6Address": "",
   692  					"GlobalIPv6PrefixLen": 0,
   693  					"MacAddress": "02:42:ac:12:00:02"
   694  				}
   695  			}
   696  		},
   697  		"Path": "/bin/sh",
   698  		"ProcessLabel": "",
   699  		"ResolvConfPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf",
   700  		"RestartCount": 1,
   701  		"State": {
   702  			"Error": "",
   703  			"ExitCode": 9,
   704  			"FinishedAt": "2015-01-06T15:47:32.080254511Z",
   705  			"OOMKilled": false,
   706  			"Dead": false,
   707  			"Paused": false,
   708  			"Pid": 0,
   709  			"Restarting": false,
   710  			"Running": true,
   711  			"StartedAt": "2015-01-06T15:47:32.072697474Z",
   712  			"Status": "running"
   713  		},
   714  		"Mounts": [
   715  			{
   716  				"Name": "fac362...80535",
   717  				"Source": "/data",
   718  				"Destination": "/data",
   719  				"Driver": "local",
   720  				"Mode": "ro,Z",
   721  				"RW": false,
   722  				"Propagation": ""
   723  			}
   724  		]
   725  	}
   726  
   727  **Example request, with size information**:
   728  
   729      GET /v1.24/containers/4fa6e0f0c678/json?size=1 HTTP/1.1
   730  
   731  **Example response, with size information**:
   732  
   733      HTTP/1.1 200 OK
   734      Content-Type: application/json
   735  
   736      {
   737      ....
   738      "SizeRw": 0,
   739      "SizeRootFs": 972,
   740      ....
   741      }
   742  
   743  **Query parameters**:
   744  
   745  -   **size** – 1/True/true or 0/False/false, return container size information. Default is `false`.
   746  
   747  **Status codes**:
   748  
   749  -   **200** – no error
   750  -   **404** – no such container
   751  -   **500** – server error
   752  
   753  #### List processes running inside a container
   754  
   755  `GET /containers/(id or name)/top`
   756  
   757  List processes running inside the container `id`. On Unix systems this
   758  is done by running the `ps` command. This endpoint is not
   759  supported on Windows.
   760  
   761  **Example request**:
   762  
   763      GET /v1.24/containers/4fa6e0f0c678/top HTTP/1.1
   764  
   765  **Example response**:
   766  
   767      HTTP/1.1 200 OK
   768      Content-Type: application/json
   769  
   770      {
   771         "Titles" : [
   772           "UID", "PID", "PPID", "C", "STIME", "TTY", "TIME", "CMD"
   773         ],
   774         "Processes" : [
   775           [
   776             "root", "13642", "882", "0", "17:03", "pts/0", "00:00:00", "/bin/bash"
   777           ],
   778           [
   779             "root", "13735", "13642", "0", "17:06", "pts/0", "00:00:00", "sleep 10"
   780           ]
   781         ]
   782      }
   783  
   784  **Example request**:
   785  
   786      GET /v1.24/containers/4fa6e0f0c678/top?ps_args=aux HTTP/1.1
   787  
   788  **Example response**:
   789  
   790      HTTP/1.1 200 OK
   791      Content-Type: application/json
   792  
   793      {
   794        "Titles" : [
   795          "USER","PID","%CPU","%MEM","VSZ","RSS","TTY","STAT","START","TIME","COMMAND"
   796        ]
   797        "Processes" : [
   798          [
   799            "root","13642","0.0","0.1","18172","3184","pts/0","Ss","17:03","0:00","/bin/bash"
   800          ],
   801          [
   802            "root","13895","0.0","0.0","4348","692","pts/0","S+","17:15","0:00","sleep 10"
   803          ]
   804        ],
   805      }
   806  
   807  **Query parameters**:
   808  
   809  -   **ps_args** – `ps` arguments to use (e.g., `aux`), defaults to `-ef`
   810  
   811  **Status codes**:
   812  
   813  -   **200** – no error
   814  -   **404** – no such container
   815  -   **500** – server error
   816  
   817  #### Get container logs
   818  
   819  `GET /containers/(id or name)/logs`
   820  
   821  Get `stdout` and `stderr` logs from the container ``id``
   822  
   823  > **Note**:
   824  > This endpoint works only for containers with the `json-file` or `journald` logging drivers.
   825  
   826  **Example request**:
   827  
   828       GET /v1.24/containers/4fa6e0f0c678/logs?stderr=1&stdout=1&timestamps=1&follow=1&tail=10&since=1428990821 HTTP/1.1
   829  
   830  **Example response**:
   831  
   832       HTTP/1.1 101 UPGRADED
   833       Content-Type: application/vnd.docker.raw-stream
   834       Connection: Upgrade
   835       Upgrade: tcp
   836  
   837       {% raw %}
   838       {{ STREAM }}
   839       {% endraw %}
   840  
   841  **Query parameters**:
   842  
   843  -   **details** - 1/True/true or 0/False/false, Show extra details provided to logs. Default `false`.
   844  -   **follow** – 1/True/true or 0/False/false, return stream. Default `false`.
   845  -   **stdout** – 1/True/true or 0/False/false, show `stdout` log. Default `false`.
   846  -   **stderr** – 1/True/true or 0/False/false, show `stderr` log. Default `false`.
   847  -   **since** – UNIX timestamp (integer) to filter logs. Specifying a timestamp
   848      will only output log-entries since that timestamp. Default: 0 (unfiltered)
   849  -   **timestamps** – 1/True/true or 0/False/false, print timestamps for
   850          every log line. Default `false`.
   851  -   **tail** – Output specified number of lines at the end of logs: `all` or `<number>`. Default all.
   852  
   853  **Status codes**:
   854  
   855  -   **101** – no error, hints proxy about hijacking
   856  -   **200** – no error, no upgrade header found
   857  -   **404** – no such container
   858  -   **500** – server error
   859  
   860  #### Inspect changes on a container's filesystem
   861  
   862  `GET /containers/(id or name)/changes`
   863  
   864  Inspect changes on container `id`'s filesystem
   865  
   866  **Example request**:
   867  
   868      GET /v1.24/containers/4fa6e0f0c678/changes HTTP/1.1
   869  
   870  **Example response**:
   871  
   872      HTTP/1.1 200 OK
   873      Content-Type: application/json
   874  
   875      [
   876           {
   877                   "Path": "/dev",
   878                   "Kind": 0
   879           },
   880           {
   881                   "Path": "/dev/kmsg",
   882                   "Kind": 1
   883           },
   884           {
   885                   "Path": "/test",
   886                   "Kind": 1
   887           }
   888      ]
   889  
   890  Values for `Kind`:
   891  
   892  - `0`: Modify
   893  - `1`: Add
   894  - `2`: Delete
   895  
   896  **Status codes**:
   897  
   898  -   **200** – no error
   899  -   **404** – no such container
   900  -   **500** – server error
   901  
   902  #### Export a container
   903  
   904  `GET /containers/(id or name)/export`
   905  
   906  Export the contents of container `id`
   907  
   908  **Example request**:
   909  
   910      GET /v1.24/containers/4fa6e0f0c678/export HTTP/1.1
   911  
   912  **Example response**:
   913  
   914      HTTP/1.1 200 OK
   915      Content-Type: application/octet-stream
   916  
   917      {% raw %}
   918      {{ TAR STREAM }}
   919      {% endraw %}
   920  
   921  **Status codes**:
   922  
   923  -   **200** – no error
   924  -   **404** – no such container
   925  -   **500** – server error
   926  
   927  #### Get container stats based on resource usage
   928  
   929  `GET /containers/(id or name)/stats`
   930  
   931  This endpoint returns a live stream of a container's resource usage statistics.
   932  
   933  **Example request**:
   934  
   935      GET /v1.24/containers/redis1/stats HTTP/1.1
   936  
   937  **Example response**:
   938  
   939        HTTP/1.1 200 OK
   940        Content-Type: application/json
   941  
   942        {
   943           "read" : "2015-01-08T22:57:31.547920715Z",
   944           "pids_stats": {
   945              "current": 3
   946           },
   947           "networks": {
   948                   "eth0": {
   949                       "rx_bytes": 5338,
   950                       "rx_dropped": 0,
   951                       "rx_errors": 0,
   952                       "rx_packets": 36,
   953                       "tx_bytes": 648,
   954                       "tx_dropped": 0,
   955                       "tx_errors": 0,
   956                       "tx_packets": 8
   957                   },
   958                   "eth5": {
   959                       "rx_bytes": 4641,
   960                       "rx_dropped": 0,
   961                       "rx_errors": 0,
   962                       "rx_packets": 26,
   963                       "tx_bytes": 690,
   964                       "tx_dropped": 0,
   965                       "tx_errors": 0,
   966                       "tx_packets": 9
   967                   }
   968           },
   969           "memory_stats" : {
   970              "stats" : {
   971                 "total_pgmajfault" : 0,
   972                 "cache" : 0,
   973                 "mapped_file" : 0,
   974                 "total_inactive_file" : 0,
   975                 "pgpgout" : 414,
   976                 "rss" : 6537216,
   977                 "total_mapped_file" : 0,
   978                 "writeback" : 0,
   979                 "unevictable" : 0,
   980                 "pgpgin" : 477,
   981                 "total_unevictable" : 0,
   982                 "pgmajfault" : 0,
   983                 "total_rss" : 6537216,
   984                 "total_rss_huge" : 6291456,
   985                 "total_writeback" : 0,
   986                 "total_inactive_anon" : 0,
   987                 "rss_huge" : 6291456,
   988                 "hierarchical_memory_limit" : 67108864,
   989                 "total_pgfault" : 964,
   990                 "total_active_file" : 0,
   991                 "active_anon" : 6537216,
   992                 "total_active_anon" : 6537216,
   993                 "total_pgpgout" : 414,
   994                 "total_cache" : 0,
   995                 "inactive_anon" : 0,
   996                 "active_file" : 0,
   997                 "pgfault" : 964,
   998                 "inactive_file" : 0,
   999                 "total_pgpgin" : 477
  1000              },
  1001              "max_usage" : 6651904,
  1002              "usage" : 6537216,
  1003              "failcnt" : 0,
  1004              "limit" : 67108864
  1005           },
  1006           "blkio_stats" : {},
  1007           "cpu_stats" : {
  1008              "cpu_usage" : {
  1009                 "percpu_usage" : [
  1010                    8646879,
  1011                    24472255,
  1012                    36438778,
  1013                    30657443
  1014                 ],
  1015                 "usage_in_usermode" : 50000000,
  1016                 "total_usage" : 100215355,
  1017                 "usage_in_kernelmode" : 30000000
  1018              },
  1019              "system_cpu_usage" : 739306590000000,
  1020              "throttling_data" : {"periods":0,"throttled_periods":0,"throttled_time":0}
  1021           },
  1022           "precpu_stats" : {
  1023              "cpu_usage" : {
  1024                 "percpu_usage" : [
  1025                    8646879,
  1026                    24350896,
  1027                    36438778,
  1028                    30657443
  1029                 ],
  1030                 "usage_in_usermode" : 50000000,
  1031                 "total_usage" : 100093996,
  1032                 "usage_in_kernelmode" : 30000000
  1033              },
  1034              "system_cpu_usage" : 9492140000000,
  1035              "throttling_data" : {"periods":0,"throttled_periods":0,"throttled_time":0}
  1036           }
  1037        }
  1038  
  1039  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.
  1040  
  1041  **Query parameters**:
  1042  
  1043  -   **stream** – 1/True/true or 0/False/false, pull stats once then disconnect. Default `true`.
  1044  
  1045  **Status codes**:
  1046  
  1047  -   **200** – no error
  1048  -   **404** – no such container
  1049  -   **500** – server error
  1050  
  1051  #### Resize a container TTY
  1052  
  1053  `POST /containers/(id or name)/resize`
  1054  
  1055  Resize the TTY for container with  `id`. The unit is number of characters. You must restart the container for the resize to take effect.
  1056  
  1057  **Example request**:
  1058  
  1059        POST /v1.24/containers/4fa6e0f0c678/resize?h=40&w=80 HTTP/1.1
  1060  
  1061  **Example response**:
  1062  
  1063        HTTP/1.1 200 OK
  1064        Content-Length: 0
  1065        Content-Type: text/plain; charset=utf-8
  1066  
  1067  **Query parameters**:
  1068  
  1069  -   **h** – height of `tty` session
  1070  -   **w** – width
  1071  
  1072  **Status codes**:
  1073  
  1074  -   **200** – no error
  1075  -   **404** – No such container
  1076  -   **500** – Cannot resize container
  1077  
  1078  #### Start a container
  1079  
  1080  `POST /containers/(id or name)/start`
  1081  
  1082  Start the container `id`
  1083  
  1084  **Example request**:
  1085  
  1086      POST /v1.24/containers/e90e34656806/start HTTP/1.1
  1087  
  1088  **Example response**:
  1089  
  1090      HTTP/1.1 204 No Content
  1091  
  1092  **Query parameters**:
  1093  
  1094  -   **detachKeys** – Override the key sequence for detaching a
  1095          container. Format is a single character `[a-Z]` or `ctrl-<value>`
  1096          where `<value>` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`.
  1097  
  1098  **Status codes**:
  1099  
  1100  -   **204** – no error
  1101  -   **304** – container already started
  1102  -   **404** – no such container
  1103  -   **500** – server error
  1104  
  1105  #### Stop a container
  1106  
  1107  `POST /containers/(id or name)/stop`
  1108  
  1109  Stop the container `id`
  1110  
  1111  **Example request**:
  1112  
  1113      POST /v1.24/containers/e90e34656806/stop?t=5 HTTP/1.1
  1114  
  1115  **Example response**:
  1116  
  1117      HTTP/1.1 204 No Content
  1118  
  1119  **Query parameters**:
  1120  
  1121  -   **t** – number of seconds to wait before killing the container
  1122  
  1123  **Status codes**:
  1124  
  1125  -   **204** – no error
  1126  -   **304** – container already stopped
  1127  -   **404** – no such container
  1128  -   **500** – server error
  1129  
  1130  #### Restart a container
  1131  
  1132  `POST /containers/(id or name)/restart`
  1133  
  1134  Restart the container `id`
  1135  
  1136  **Example request**:
  1137  
  1138      POST /v1.24/containers/e90e34656806/restart?t=5 HTTP/1.1
  1139  
  1140  **Example response**:
  1141  
  1142      HTTP/1.1 204 No Content
  1143  
  1144  **Query parameters**:
  1145  
  1146  -   **t** – number of seconds to wait before killing the container
  1147  
  1148  **Status codes**:
  1149  
  1150  -   **204** – no error
  1151  -   **404** – no such container
  1152  -   **500** – server error
  1153  
  1154  #### Kill a container
  1155  
  1156  `POST /containers/(id or name)/kill`
  1157  
  1158  Kill the container `id`
  1159  
  1160  **Example request**:
  1161  
  1162      POST /v1.24/containers/e90e34656806/kill HTTP/1.1
  1163  
  1164  **Example response**:
  1165  
  1166      HTTP/1.1 204 No Content
  1167  
  1168  **Query parameters**:
  1169  
  1170  -   **signal** - Signal to send to the container: integer or string like `SIGINT`.
  1171          When not set, `SIGKILL` is assumed and the call waits for the container to exit.
  1172  
  1173  **Status codes**:
  1174  
  1175  -   **204** – no error
  1176  -   **404** – no such container
  1177  -   **500** – server error
  1178  
  1179  #### Update a container
  1180  
  1181  `POST /containers/(id or name)/update`
  1182  
  1183  Update configuration of one or more containers.
  1184  
  1185  **Example request**:
  1186  
  1187         POST /v1.24/containers/e90e34656806/update HTTP/1.1
  1188         Content-Type: application/json
  1189         Content-Length: 12345
  1190  
  1191         {
  1192           "BlkioWeight": 300,
  1193           "CpuShares": 512,
  1194           "CpuPeriod": 100000,
  1195           "CpuQuota": 50000,
  1196           "CpusetCpus": "0,1",
  1197           "CpusetMems": "0",
  1198           "Memory": 314572800,
  1199           "MemorySwap": 514288000,
  1200           "MemoryReservation": 209715200,
  1201           "KernelMemory": 52428800,
  1202           "RestartPolicy": {
  1203             "MaximumRetryCount": 4,
  1204             "Name": "on-failure"
  1205           }
  1206         }
  1207  
  1208  **Example response**:
  1209  
  1210         HTTP/1.1 200 OK
  1211         Content-Type: application/json
  1212  
  1213         {
  1214             "Warnings": []
  1215         }
  1216  
  1217  **Status codes**:
  1218  
  1219  -   **200** – no error
  1220  -   **400** – bad parameter
  1221  -   **404** – no such container
  1222  -   **500** – server error
  1223  
  1224  #### Rename a container
  1225  
  1226  `POST /containers/(id or name)/rename`
  1227  
  1228  Rename the container `id` to a `new_name`
  1229  
  1230  **Example request**:
  1231  
  1232      POST /v1.24/containers/e90e34656806/rename?name=new_name HTTP/1.1
  1233  
  1234  **Example response**:
  1235  
  1236      HTTP/1.1 204 No Content
  1237  
  1238  **Query parameters**:
  1239  
  1240  -   **name** – new name for the container
  1241  
  1242  **Status codes**:
  1243  
  1244  -   **204** – no error
  1245  -   **404** – no such container
  1246  -   **409** - conflict name already assigned
  1247  -   **500** – server error
  1248  
  1249  #### Pause a container
  1250  
  1251  `POST /containers/(id or name)/pause`
  1252  
  1253  Pause the container `id`
  1254  
  1255  **Example request**:
  1256  
  1257      POST /v1.24/containers/e90e34656806/pause HTTP/1.1
  1258  
  1259  **Example response**:
  1260  
  1261      HTTP/1.1 204 No Content
  1262  
  1263  **Status codes**:
  1264  
  1265  -   **204** – no error
  1266  -   **404** – no such container
  1267  -   **500** – server error
  1268  
  1269  #### Unpause a container
  1270  
  1271  `POST /containers/(id or name)/unpause`
  1272  
  1273  Unpause the container `id`
  1274  
  1275  **Example request**:
  1276  
  1277      POST /v1.24/containers/e90e34656806/unpause HTTP/1.1
  1278  
  1279  **Example response**:
  1280  
  1281      HTTP/1.1 204 No Content
  1282  
  1283  **Status codes**:
  1284  
  1285  -   **204** – no error
  1286  -   **404** – no such container
  1287  -   **500** – server error
  1288  
  1289  #### Attach to a container
  1290  
  1291  `POST /containers/(id or name)/attach`
  1292  
  1293  Attach to the container `id`
  1294  
  1295  **Example request**:
  1296  
  1297      POST /v1.24/containers/16253994b7c4/attach?logs=1&stream=0&stdout=1 HTTP/1.1
  1298  
  1299  **Example response**:
  1300  
  1301      HTTP/1.1 101 UPGRADED
  1302      Content-Type: application/vnd.docker.raw-stream
  1303      Connection: Upgrade
  1304      Upgrade: tcp
  1305  
  1306      {% raw %}
  1307      {{ STREAM }}
  1308      {% endraw %}
  1309  
  1310  **Query parameters**:
  1311  
  1312  -   **detachKeys** – Override the key sequence for detaching a
  1313          container. Format is a single character `[a-Z]` or `ctrl-<value>`
  1314          where `<value>` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`.
  1315  -   **logs** – 1/True/true or 0/False/false, return logs. Default `false`.
  1316  -   **stream** – 1/True/true or 0/False/false, return stream.
  1317          Default `false`.
  1318  -   **stdin** – 1/True/true or 0/False/false, if `stream=true`, attach
  1319          to `stdin`. Default `false`.
  1320  -   **stdout** – 1/True/true or 0/False/false, if `logs=true`, return
  1321          `stdout` log, if `stream=true`, attach to `stdout`. Default `false`.
  1322  -   **stderr** – 1/True/true or 0/False/false, if `logs=true`, return
  1323          `stderr` log, if `stream=true`, attach to `stderr`. Default `false`.
  1324  
  1325  **Status codes**:
  1326  
  1327  -   **101** – no error, hints proxy about hijacking
  1328  -   **200** – no error, no upgrade header found
  1329  -   **400** – bad parameter
  1330  -   **404** – no such container
  1331  -   **409** - container is paused
  1332  -   **500** – server error
  1333  
  1334  **Stream details**:
  1335  
  1336  When using the TTY setting is enabled in
  1337  [`POST /containers/create`
  1338  ](#create-a-container),
  1339  the stream is the raw data from the process PTY and client's `stdin`.
  1340  When the TTY is disabled, then the stream is multiplexed to separate
  1341  `stdout` and `stderr`.
  1342  
  1343  The format is a **Header** and a **Payload** (frame).
  1344  
  1345  **HEADER**
  1346  
  1347  The header contains the information which the stream writes (`stdout` or
  1348  `stderr`). It also contains the size of the associated frame encoded in the
  1349  last four bytes (`uint32`).
  1350  
  1351  It is encoded on the first eight bytes like this:
  1352  
  1353      header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}
  1354  
  1355  `STREAM_TYPE` can be:
  1356  
  1357  -   0: `stdin` (is written on `stdout`)
  1358  -   1: `stdout`
  1359  -   2: `stderr`
  1360  
  1361  `SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of
  1362  the `uint32` size encoded as big endian.
  1363  
  1364  **PAYLOAD**
  1365  
  1366  The payload is the raw stream.
  1367  
  1368  **IMPLEMENTATION**
  1369  
  1370  The simplest way to implement the Attach protocol is the following:
  1371  
  1372      1.  Read eight bytes.
  1373      2.  Choose `stdout` or `stderr` depending on the first byte.
  1374      3.  Extract the frame size from the last four bytes.
  1375      4.  Read the extracted size and output it on the correct output.
  1376      5.  Goto 1.
  1377  
  1378  #### Attach to a container (websocket)
  1379  
  1380  `GET /containers/(id or name)/attach/ws`
  1381  
  1382  Attach to the container `id` via websocket
  1383  
  1384  Implements websocket protocol handshake according to [RFC 6455](http://tools.ietf.org/html/rfc6455)
  1385  
  1386  **Example request**
  1387  
  1388      GET /v1.24/containers/e90e34656806/attach/ws?logs=0&stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1
  1389  
  1390  **Example response**
  1391  
  1392      {% raw %}
  1393      {{ STREAM }}
  1394      {% endraw %}
  1395  
  1396  **Query parameters**:
  1397  
  1398  -   **detachKeys** – Override the key sequence for detaching a
  1399          container. Format is a single character `[a-Z]` or `ctrl-<value>`
  1400          where `<value>` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`.
  1401  -   **logs** – 1/True/true or 0/False/false, return logs. Default `false`.
  1402  -   **stream** – 1/True/true or 0/False/false, return stream.
  1403          Default `false`.
  1404  -   **stdin** – 1/True/true or 0/False/false, if `stream=true`, attach
  1405          to `stdin`. Default `false`.
  1406  -   **stdout** – 1/True/true or 0/False/false, if `logs=true`, return
  1407          `stdout` log, if `stream=true`, attach to `stdout`. Default `false`.
  1408  -   **stderr** – 1/True/true or 0/False/false, if `logs=true`, return
  1409          `stderr` log, if `stream=true`, attach to `stderr`. Default `false`.
  1410  
  1411  **Status codes**:
  1412  
  1413  -   **200** – no error
  1414  -   **400** – bad parameter
  1415  -   **404** – no such container
  1416  -   **500** – server error
  1417  
  1418  #### Wait a container
  1419  
  1420  `POST /containers/(id or name)/wait`
  1421  
  1422  Block until container `id` stops, then returns the exit code
  1423  
  1424  **Example request**:
  1425  
  1426      POST /v1.24/containers/16253994b7c4/wait HTTP/1.1
  1427  
  1428  **Example response**:
  1429  
  1430      HTTP/1.1 200 OK
  1431      Content-Type: application/json
  1432  
  1433      {"StatusCode": 0}
  1434  
  1435  **Status codes**:
  1436  
  1437  -   **200** – no error
  1438  -   **404** – no such container
  1439  -   **500** – server error
  1440  
  1441  #### Remove a container
  1442  
  1443  `DELETE /containers/(id or name)`
  1444  
  1445  Remove the container `id` from the filesystem
  1446  
  1447  **Example request**:
  1448  
  1449      DELETE /v1.24/containers/16253994b7c4?v=1 HTTP/1.1
  1450  
  1451  **Example response**:
  1452  
  1453      HTTP/1.1 204 No Content
  1454  
  1455  **Query parameters**:
  1456  
  1457  -   **v** – 1/True/true or 0/False/false, Remove the volumes
  1458          associated to the container. Default `false`.
  1459  -   **force** - 1/True/true or 0/False/false, Kill then remove the container.
  1460          Default `false`.
  1461  -   **link** - 1/True/true or 0/False/false, Remove the specified
  1462          link associated to the container. Default `false`.
  1463  
  1464  **Status codes**:
  1465  
  1466  -   **204** – no error
  1467  -   **400** – bad parameter
  1468  -   **404** – no such container
  1469  -   **409** – conflict
  1470  -   **500** – server error
  1471  
  1472  #### Retrieving information about files and folders in a container
  1473  
  1474  `HEAD /containers/(id or name)/archive`
  1475  
  1476  See the description of the `X-Docker-Container-Path-Stat` header in the
  1477  following section.
  1478  
  1479  #### Get an archive of a filesystem resource in a container
  1480  
  1481  `GET /containers/(id or name)/archive`
  1482  
  1483  Get a tar archive of a resource in the filesystem of container `id`.
  1484  
  1485  **Query parameters**:
  1486  
  1487  - **path** - resource in the container's filesystem to archive. Required.
  1488  
  1489      If not an absolute path, it is relative to the container's root directory.
  1490      The resource specified by **path** must exist. To assert that the resource
  1491      is expected to be a directory, **path** should end in `/` or  `/.`
  1492      (assuming a path separator of `/`). If **path** ends in `/.` then this
  1493      indicates that only the contents of the **path** directory should be
  1494      copied. A symlink is always resolved to its target.
  1495  
  1496      > **Note**: It is not possible to copy certain system files such as resources
  1497      > under `/proc`, `/sys`, `/dev`, and mounts created by the user in the
  1498      > container.
  1499  
  1500  **Example request**:
  1501  
  1502      GET /v1.24/containers/8cce319429b2/archive?path=/root HTTP/1.1
  1503  
  1504  **Example response**:
  1505  
  1506      HTTP/1.1 200 OK
  1507      Content-Type: application/x-tar
  1508      X-Docker-Container-Path-Stat: eyJuYW1lIjoicm9vdCIsInNpemUiOjQwOTYsIm1vZGUiOjIxNDc0ODQwOTYsIm10aW1lIjoiMjAxNC0wMi0yN1QyMDo1MToyM1oiLCJsaW5rVGFyZ2V0IjoiIn0=
  1509  
  1510      {% raw %}
  1511      {{ TAR STREAM }}
  1512      {% endraw %}
  1513  
  1514  On success, a response header `X-Docker-Container-Path-Stat` will be set to a
  1515  base64-encoded JSON object containing some filesystem header information about
  1516  the archived resource. The above example value would decode to the following
  1517  JSON object (whitespace added for readability):
  1518  
  1519  ```json
  1520  {
  1521      "name": "root",
  1522      "size": 4096,
  1523      "mode": 2147484096,
  1524      "mtime": "2014-02-27T20:51:23Z",
  1525      "linkTarget": ""
  1526  }
  1527  ```
  1528  
  1529  A `HEAD` request can also be made to this endpoint if only this information is
  1530  desired.
  1531  
  1532  **Status codes**:
  1533  
  1534  - **200** - success, returns archive of copied resource
  1535  - **400** - client error, bad parameter, details in JSON response body, one of:
  1536      - must specify path parameter (**path** cannot be empty)
  1537      - not a directory (**path** was asserted to be a directory but exists as a
  1538        file)
  1539  - **404** - client error, resource not found, one of:
  1540      – no such container (container `id` does not exist)
  1541      - no such file or directory (**path** does not exist)
  1542  - **500** - server error
  1543  
  1544  #### Extract an archive of files or folders to a directory in a container
  1545  
  1546  `PUT /containers/(id or name)/archive`
  1547  
  1548  Upload a tar archive to be extracted to a path in the filesystem of container
  1549  `id`.
  1550  
  1551  **Query parameters**:
  1552  
  1553  - **path** - path to a directory in the container
  1554      to extract the archive's contents into. Required.
  1555  
  1556      If not an absolute path, it is relative to the container's root directory.
  1557      The **path** resource must exist.
  1558  - **noOverwriteDirNonDir** - If "1", "true", or "True" then it will be an error
  1559      if unpacking the given content would cause an existing directory to be
  1560      replaced with a non-directory and vice versa.
  1561  
  1562  **Example request**:
  1563  
  1564      PUT /v1.24/containers/8cce319429b2/archive?path=/vol1 HTTP/1.1
  1565      Content-Type: application/x-tar
  1566  
  1567      {% raw %}
  1568      {{ TAR STREAM }}
  1569      {% endraw %}
  1570  
  1571  **Example response**:
  1572  
  1573      HTTP/1.1 200 OK
  1574  
  1575  **Status codes**:
  1576  
  1577  - **200** – the content was extracted successfully
  1578  - **400** - client error, bad parameter, details in JSON response body, one of:
  1579      - must specify path parameter (**path** cannot be empty)
  1580      - not a directory (**path** should be a directory but exists as a file)
  1581      - unable to overwrite existing directory with non-directory
  1582        (if **noOverwriteDirNonDir**)
  1583      - unable to overwrite existing non-directory with directory
  1584        (if **noOverwriteDirNonDir**)
  1585  - **403** - client error, permission denied, the volume
  1586      or container rootfs is marked as read-only.
  1587  - **404** - client error, resource not found, one of:
  1588      – no such container (container `id` does not exist)
  1589      - no such file or directory (**path** resource does not exist)
  1590  - **500** – server error
  1591  
  1592  ### 3.2 Images
  1593  
  1594  #### List Images
  1595  
  1596  `GET /images/json`
  1597  
  1598  **Example request**:
  1599  
  1600      GET /v1.24/images/json?all=0 HTTP/1.1
  1601  
  1602  **Example response**:
  1603  
  1604      HTTP/1.1 200 OK
  1605      Content-Type: application/json
  1606  
  1607      [
  1608        {
  1609           "RepoTags": [
  1610             "ubuntu:12.04",
  1611             "ubuntu:precise",
  1612             "ubuntu:latest"
  1613           ],
  1614           "Id": "8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c",
  1615           "Created": 1365714795,
  1616           "Size": 131506275,
  1617           "VirtualSize": 131506275,
  1618           "Labels": {}
  1619        },
  1620        {
  1621           "RepoTags": [
  1622             "ubuntu:12.10",
  1623             "ubuntu:quantal"
  1624           ],
  1625           "ParentId": "27cf784147099545",
  1626           "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc",
  1627           "Created": 1364102658,
  1628           "Size": 24653,
  1629           "VirtualSize": 180116135,
  1630           "Labels": {
  1631              "com.example.version": "v1"
  1632           }
  1633        }
  1634      ]
  1635  
  1636  **Example request, with digest information**:
  1637  
  1638      GET /v1.24/images/json?digests=1 HTTP/1.1
  1639  
  1640  **Example response, with digest information**:
  1641  
  1642      HTTP/1.1 200 OK
  1643      Content-Type: application/json
  1644  
  1645      [
  1646        {
  1647          "Created": 1420064636,
  1648          "Id": "4986bf8c15363d1c5d15512d5266f8777bfba4974ac56e3270e7760f6f0a8125",
  1649          "ParentId": "ea13149945cb6b1e746bf28032f02e9b5a793523481a0a18645fc77ad53c4ea2",
  1650          "RepoDigests": [
  1651            "localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf"
  1652          ],
  1653          "RepoTags": [
  1654            "localhost:5000/test/busybox:latest",
  1655            "playdate:latest"
  1656          ],
  1657          "Size": 0,
  1658          "VirtualSize": 2429728,
  1659          "Labels": {}
  1660        }
  1661      ]
  1662  
  1663  The response shows a single image `Id` associated with two repositories
  1664  (`RepoTags`): `localhost:5000/test/busybox`: and `playdate`. A caller can use
  1665  either of the `RepoTags` values `localhost:5000/test/busybox:latest` or
  1666  `playdate:latest` to reference the image.
  1667  
  1668  You can also use `RepoDigests` values to reference an image. In this response,
  1669  the array has only one reference and that is to the
  1670  `localhost:5000/test/busybox` repository; the `playdate` repository has no
  1671  digest. You can reference this digest using the value:
  1672  `localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d...`
  1673  
  1674  See the `docker run` and `docker build` commands for examples of digest and tag
  1675  references on the command line.
  1676  
  1677  **Query parameters**:
  1678  
  1679  -   **all** – 1/True/true or 0/False/false, default false
  1680  -   **filters** – a JSON encoded value of the filters (a map[string][]string) to process on the images list. Available filters:
  1681    -   `dangling=true`
  1682    -   `label=key` or `label="key=value"` of an image label
  1683    -   `before`=(`<image-name>[:<tag>]`,  `<image id>` or `<image@digest>`)
  1684    -   `since`=(`<image-name>[:<tag>]`,  `<image id>` or `<image@digest>`)
  1685  -   **filter** - only return images with the specified name
  1686  
  1687  #### Build image from a Dockerfile
  1688  
  1689  `POST /build`
  1690  
  1691  Build an image from a Dockerfile
  1692  
  1693  **Example request**:
  1694  
  1695      POST /v1.24/build HTTP/1.1
  1696      Content-Type: application/x-tar
  1697  
  1698      {% raw %}
  1699      {{ TAR STREAM }}
  1700      {% endraw %}
  1701  
  1702  **Example response**:
  1703  
  1704      HTTP/1.1 200 OK
  1705      Content-Type: application/json
  1706  
  1707      {"stream": "Step 1/5..."}
  1708      {"stream": "..."}
  1709      {"error": "Error...", "errorDetail": {"code": 123, "message": "Error..."}}
  1710  
  1711  The input stream must be a `tar` archive compressed with one of the
  1712  following algorithms: `identity` (no compression), `gzip`, `bzip2`, `xz`.
  1713  
  1714  The archive must include a build instructions file, typically called
  1715  `Dockerfile` at the archive's root. The `dockerfile` parameter may be
  1716  used to specify a different build instructions file. To do this, its value must be
  1717  the path to the alternate build instructions file to use.
  1718  
  1719  The archive may include any number of other files,
  1720  which are accessible in the build context (See the [*ADD build
  1721  command*](https://docs.docker.com/engine/reference/builder/#add)).
  1722  
  1723  The Docker daemon performs a preliminary validation of the `Dockerfile` before
  1724  starting the build, and returns an error if the syntax is incorrect. After that,
  1725  each instruction is run one-by-one until the ID of the new image is output.
  1726  
  1727  The build is canceled if the client drops the connection by quitting
  1728  or being killed.
  1729  
  1730  **Query parameters**:
  1731  
  1732  -   **dockerfile** - Path within the build context to the `Dockerfile`. This is
  1733          ignored if `remote` is specified and points to an external `Dockerfile`.
  1734  -   **t** – A name and optional tag to apply to the image in the `name:tag` format.
  1735          If you omit the `tag` the default `latest` value is assumed.
  1736          You can provide one or more `t` parameters.
  1737  -   **remote** – A Git repository URI or HTTP/HTTPS context URI. If the
  1738          URI points to a single text file, the file's contents are placed into
  1739          a file called `Dockerfile` and the image is built from that file. If
  1740          the URI points to a tarball, the file is downloaded by the daemon and
  1741          the contents therein used as the context for the build. If the URI
  1742          points to a tarball and the `dockerfile` parameter is also specified,
  1743          there must be a file with the corresponding path inside the tarball.
  1744  -   **q** – Suppress verbose build output.
  1745  -   **nocache** – Do not use the cache when building the image.
  1746  -   **pull** - Attempt to pull the image even if an older image exists locally.
  1747  -   **rm** - Remove intermediate containers after a successful build (default behavior).
  1748  -   **forcerm** - Always remove intermediate containers (includes `rm`).
  1749  -   **memory** - Set memory limit for build.
  1750  -   **memswap** - Total memory (memory + swap), `-1` to enable unlimited swap.
  1751  -   **cpushares** - CPU shares (relative weight).
  1752  -   **cpusetcpus** - CPUs in which to allow execution (e.g., `0-3`, `0,1`).
  1753  -   **cpuperiod** - The length of a CPU period in microseconds.
  1754  -   **cpuquota** - Microseconds of CPU time that the container can get in a CPU period.
  1755  -   **buildargs** – JSON map of string pairs for build-time variables. Users pass
  1756          these values at build-time. Docker uses the `buildargs` as the environment
  1757          context for command(s) run via the Dockerfile's `RUN` instruction or for
  1758          variable expansion in other Dockerfile instructions. This is not meant for
  1759          passing secret values. [Read more about the buildargs instruction](https://docs.docker.com/engine/reference/builder/#arg)
  1760  -   **shmsize** - Size of `/dev/shm` in bytes. The size must be greater than 0.  If omitted the system uses 64MB.
  1761  -   **labels** – JSON map of string pairs for labels to set on the image.
  1762  
  1763  **Request Headers**:
  1764  
  1765  -   **Content-type** – Set to `"application/x-tar"`.
  1766  -   **X-Registry-Config** – A base64-url-safe-encoded Registry Auth Config JSON
  1767          object with the following structure:
  1768  
  1769              {
  1770                  "docker.example.com": {
  1771                      "username": "janedoe",
  1772                      "password": "hunter2"
  1773                  },
  1774                  "https://index.docker.io/v1/": {
  1775                      "username": "mobydock",
  1776                      "password": "conta1n3rize14"
  1777                  }
  1778              }
  1779  
  1780      This object maps the hostname of a registry to an object containing the
  1781      "username" and "password" for that registry. Multiple registries may
  1782      be specified as the build may be based on an image requiring
  1783      authentication to pull from any arbitrary registry. Only the registry
  1784      domain name (and port if not the default "443") are required. However
  1785      (for legacy reasons) the "official" Docker, Inc. hosted registry must
  1786      be specified with both a "https://" prefix and a "/v1/" suffix even
  1787      though Docker will prefer to use the v2 registry API.
  1788  
  1789  **Status codes**:
  1790  
  1791  -   **200** – no error
  1792  -   **500** – server error
  1793  
  1794  #### Create an image
  1795  
  1796  `POST /images/create`
  1797  
  1798  Create an image either by pulling it from the registry or by importing it
  1799  
  1800  **Example request**:
  1801  
  1802      POST /v1.24/images/create?fromImage=busybox&tag=latest HTTP/1.1
  1803  
  1804  **Example response**:
  1805  
  1806      HTTP/1.1 200 OK
  1807      Content-Type: application/json
  1808  
  1809      {"status": "Pulling..."}
  1810      {"status": "Pulling", "progress": "1 B/ 100 B", "progressDetail": {"current": 1, "total": 100}}
  1811      {"error": "Invalid..."}
  1812      ...
  1813  
  1814  When using this endpoint to pull an image from the registry, the
  1815  `X-Registry-Auth` header can be used to include
  1816  a base64-encoded AuthConfig object.
  1817  
  1818  **Query parameters**:
  1819  
  1820  -   **fromImage** – Name of the image to pull. The name may include a tag or
  1821          digest. This parameter may only be used when pulling an image.
  1822          The pull is cancelled if the HTTP connection is closed.
  1823  -   **fromSrc** – Source to import.  The value may be a URL from which the image
  1824          can be retrieved or `-` to read the image from the request body.
  1825          This parameter may only be used when importing an image.
  1826  -   **repo** – Repository name given to an image when it is imported.
  1827          The repo may include a tag. This parameter may only be used when importing
  1828          an image.
  1829  -   **tag** – Tag or digest. If empty when pulling an image, this causes all tags
  1830          for the given image to be pulled.
  1831  
  1832  **Request Headers**:
  1833  
  1834  -   **X-Registry-Auth** – base64-encoded AuthConfig object, containing either login information, or a token
  1835      - Credential based login:
  1836  
  1837          ```
  1838      {
  1839              "username": "jdoe",
  1840              "password": "secret",
  1841              "email": "jdoe@acme.com"
  1842      }
  1843          ```
  1844  
  1845      - Token based login:
  1846  
  1847          ```
  1848      {
  1849              "identitytoken": "9cbaf023786cd7..."
  1850      }
  1851          ```
  1852  
  1853  **Status codes**:
  1854  
  1855  -   **200** – no error
  1856  -   **404** - repository does not exist or no read access
  1857  -   **500** – server error
  1858  
  1859  
  1860  
  1861  #### Inspect an image
  1862  
  1863  `GET /images/(name)/json`
  1864  
  1865  Return low-level information on the image `name`
  1866  
  1867  **Example request**:
  1868  
  1869      GET /v1.24/images/example/json HTTP/1.1
  1870  
  1871  **Example response**:
  1872  
  1873      HTTP/1.1 200 OK
  1874      Content-Type: application/json
  1875  
  1876      {
  1877         "Id" : "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c",
  1878         "Container" : "cb91e48a60d01f1e27028b4fc6819f4f290b3cf12496c8176ec714d0d390984a",
  1879         "Comment" : "",
  1880         "Os" : "linux",
  1881         "Architecture" : "amd64",
  1882         "Parent" : "sha256:91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c",
  1883         "ContainerConfig" : {
  1884            "Tty" : false,
  1885            "Hostname" : "e611e15f9c9d",
  1886            "Volumes" : null,
  1887            "Domainname" : "",
  1888            "AttachStdout" : false,
  1889            "PublishService" : "",
  1890            "AttachStdin" : false,
  1891            "OpenStdin" : false,
  1892            "StdinOnce" : false,
  1893            "NetworkDisabled" : false,
  1894            "OnBuild" : [],
  1895            "Image" : "91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c",
  1896            "User" : "",
  1897            "WorkingDir" : "",
  1898            "Entrypoint" : null,
  1899            "MacAddress" : "",
  1900            "AttachStderr" : false,
  1901            "Labels" : {
  1902               "com.example.license" : "GPL",
  1903               "com.example.version" : "1.0",
  1904               "com.example.vendor" : "Acme"
  1905            },
  1906            "Env" : [
  1907               "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  1908            ],
  1909            "ExposedPorts" : null,
  1910            "Cmd" : [
  1911               "/bin/sh",
  1912               "-c",
  1913               "#(nop) LABEL com.example.vendor=Acme com.example.license=GPL com.example.version=1.0"
  1914            ]
  1915         },
  1916         "DockerVersion" : "1.9.0-dev",
  1917         "VirtualSize" : 188359297,
  1918         "Size" : 0,
  1919         "Author" : "",
  1920         "Created" : "2015-09-10T08:30:53.26995814Z",
  1921         "GraphDriver" : {
  1922            "Name" : "aufs",
  1923            "Data" : null
  1924         },
  1925         "RepoDigests" : [
  1926            "localhost:5000/test/busybox/example@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf"
  1927         ],
  1928         "RepoTags" : [
  1929            "example:1.0",
  1930            "example:latest",
  1931            "example:stable"
  1932         ],
  1933         "Config" : {
  1934            "Image" : "91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c",
  1935            "NetworkDisabled" : false,
  1936            "OnBuild" : [],
  1937            "StdinOnce" : false,
  1938            "PublishService" : "",
  1939            "AttachStdin" : false,
  1940            "OpenStdin" : false,
  1941            "Domainname" : "",
  1942            "AttachStdout" : false,
  1943            "Tty" : false,
  1944            "Hostname" : "e611e15f9c9d",
  1945            "Volumes" : null,
  1946            "Cmd" : [
  1947               "/bin/bash"
  1948            ],
  1949            "ExposedPorts" : null,
  1950            "Env" : [
  1951               "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  1952            ],
  1953            "Labels" : {
  1954               "com.example.vendor" : "Acme",
  1955               "com.example.version" : "1.0",
  1956               "com.example.license" : "GPL"
  1957            },
  1958            "Entrypoint" : null,
  1959            "MacAddress" : "",
  1960            "AttachStderr" : false,
  1961            "WorkingDir" : "",
  1962            "User" : ""
  1963         },
  1964         "RootFS": {
  1965             "Type": "layers",
  1966             "Layers": [
  1967                 "sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6",
  1968                 "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef"
  1969             ]
  1970         }
  1971      }
  1972  
  1973  **Status codes**:
  1974  
  1975  -   **200** – no error
  1976  -   **404** – no such image
  1977  -   **500** – server error
  1978  
  1979  #### Get the history of an image
  1980  
  1981  `GET /images/(name)/history`
  1982  
  1983  Return the history of the image `name`
  1984  
  1985  **Example request**:
  1986  
  1987      GET /v1.24/images/ubuntu/history HTTP/1.1
  1988  
  1989  **Example response**:
  1990  
  1991      HTTP/1.1 200 OK
  1992      Content-Type: application/json
  1993  
  1994      [
  1995          {
  1996              "Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710",
  1997              "Created": 1398108230,
  1998              "CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /",
  1999              "Tags": [
  2000                  "ubuntu:lucid",
  2001                  "ubuntu:10.04"
  2002              ],
  2003              "Size": 182964289,
  2004              "Comment": ""
  2005          },
  2006          {
  2007              "Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8",
  2008              "Created": 1398108222,
  2009              "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/",
  2010              "Tags": null,
  2011              "Size": 0,
  2012              "Comment": ""
  2013          },
  2014          {
  2015              "Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158",
  2016              "Created": 1371157430,
  2017              "CreatedBy": "",
  2018              "Tags": [
  2019                  "scratch12:latest",
  2020                  "scratch:latest"
  2021              ],
  2022              "Size": 0,
  2023              "Comment": "Imported from -"
  2024          }
  2025      ]
  2026  
  2027  **Status codes**:
  2028  
  2029  -   **200** – no error
  2030  -   **404** – no such image
  2031  -   **500** – server error
  2032  
  2033  #### Push an image on the registry
  2034  
  2035  `POST /images/(name)/push`
  2036  
  2037  Push the image `name` on the registry
  2038  
  2039  **Example request**:
  2040  
  2041      POST /v1.24/images/test/push HTTP/1.1
  2042  
  2043  **Example response**:
  2044  
  2045      HTTP/1.1 200 OK
  2046      Content-Type: application/json
  2047  
  2048      {"status": "Pushing..."}
  2049      {"status": "Pushing", "progress": "1/? (n/a)", "progressDetail": {"current": 1}}}
  2050      {"error": "Invalid..."}
  2051      ...
  2052  
  2053  If you wish to push an image on to a private registry, that image must already have a tag
  2054  into a repository which references that registry `hostname` and `port`.  This repository name should
  2055  then be used in the URL. This duplicates the command line's flow.
  2056  
  2057  The push is cancelled if the HTTP connection is closed.
  2058  
  2059  **Example request**:
  2060  
  2061      POST /v1.24/images/registry.acme.com:5000/test/push HTTP/1.1
  2062  
  2063  
  2064  **Query parameters**:
  2065  
  2066  -   **tag** – The tag to associate with the image on the registry. This is optional.
  2067  
  2068  **Request Headers**:
  2069  
  2070  -   **X-Registry-Auth** – base64-encoded AuthConfig object, containing either login information, or a token
  2071      - Credential based login:
  2072  
  2073          ```
  2074      {
  2075              "username": "jdoe",
  2076              "password": "secret",
  2077              "email": "jdoe@acme.com",
  2078      }
  2079          ```
  2080  
  2081      - Identity token based login:
  2082  
  2083          ```
  2084      {
  2085              "identitytoken": "9cbaf023786cd7..."
  2086      }
  2087          ```
  2088  
  2089  **Status codes**:
  2090  
  2091  -   **200** – no error
  2092  -   **404** – no such image
  2093  -   **500** – server error
  2094  
  2095  #### Tag an image into a repository
  2096  
  2097  `POST /images/(name)/tag`
  2098  
  2099  Tag the image `name` into a repository
  2100  
  2101  **Example request**:
  2102  
  2103      POST /v1.24/images/test/tag?repo=myrepo&tag=v42 HTTP/1.1
  2104  
  2105  **Example response**:
  2106  
  2107      HTTP/1.1 201 Created
  2108  
  2109  **Query parameters**:
  2110  
  2111  -   **repo** – The repository to tag in
  2112  -   **tag** - The new tag name
  2113  
  2114  **Status codes**:
  2115  
  2116  -   **201** – no error
  2117  -   **400** – bad parameter
  2118  -   **404** – no such image
  2119  -   **409** – conflict
  2120  -   **500** – server error
  2121  
  2122  #### Remove an image
  2123  
  2124  `DELETE /images/(name)`
  2125  
  2126  Remove the image `name` from the filesystem
  2127  
  2128  **Example request**:
  2129  
  2130      DELETE /v1.24/images/test HTTP/1.1
  2131  
  2132  **Example response**:
  2133  
  2134      HTTP/1.1 200 OK
  2135      Content-type: application/json
  2136  
  2137      [
  2138       {"Untagged": "3e2f21a89f"},
  2139       {"Deleted": "3e2f21a89f"},
  2140       {"Deleted": "53b4f83ac9"}
  2141      ]
  2142  
  2143  **Query parameters**:
  2144  
  2145  -   **force** – 1/True/true or 0/False/false, default false
  2146  -   **noprune** – 1/True/true or 0/False/false, default false
  2147  
  2148  **Status codes**:
  2149  
  2150  -   **200** – no error
  2151  -   **404** – no such image
  2152  -   **409** – conflict
  2153  -   **500** – server error
  2154  
  2155  #### Search images
  2156  
  2157  `GET /images/search`
  2158  
  2159  Search for an image on [Docker Hub](https://hub.docker.com).
  2160  
  2161  > **Note**:
  2162  > The response keys have changed from API v1.6 to reflect the JSON
  2163  > sent by the registry server to the docker daemon's request.
  2164  
  2165  **Example request**:
  2166  
  2167      GET /v1.24/images/search?term=sshd HTTP/1.1
  2168  
  2169  **Example response**:
  2170  
  2171      HTTP/1.1 200 OK
  2172      Content-Type: application/json
  2173  
  2174      [
  2175              {
  2176                  "description": "",
  2177                  "is_official": false,
  2178                  "is_automated": false,
  2179                  "name": "wma55/u1210sshd",
  2180                  "star_count": 0
  2181              },
  2182              {
  2183                  "description": "",
  2184                  "is_official": false,
  2185                  "is_automated": false,
  2186                  "name": "jdswinbank/sshd",
  2187                  "star_count": 0
  2188              },
  2189              {
  2190                  "description": "",
  2191                  "is_official": false,
  2192                  "is_automated": false,
  2193                  "name": "vgauthier/sshd",
  2194                  "star_count": 0
  2195              }
  2196      ...
  2197      ]
  2198  
  2199  **Query parameters**:
  2200  
  2201  -   **term** – term to search
  2202  -   **limit** – maximum returned search results
  2203  -   **filters** – a JSON encoded value of the filters (a map[string][]string) to process on the images list. Available filters:
  2204    -   `stars=<number>`
  2205    -   `is-automated=(true|false)`
  2206    -   `is-official=(true|false)`
  2207  
  2208  **Status codes**:
  2209  
  2210  -   **200** – no error
  2211  -   **500** – server error
  2212  
  2213  ### 3.3 Misc
  2214  
  2215  #### Check auth configuration
  2216  
  2217  `POST /auth`
  2218  
  2219  Validate credentials for a registry and get identity token,
  2220  if available, for accessing the registry without password.
  2221  
  2222  **Example request**:
  2223  
  2224      POST /v1.24/auth HTTP/1.1
  2225      Content-Type: application/json
  2226      Content-Length: 12345
  2227  
  2228      {
  2229           "username": "hannibal",
  2230           "password": "xxxx",
  2231           "serveraddress": "https://index.docker.io/v1/"
  2232      }
  2233  
  2234  **Example response**:
  2235  
  2236      HTTP/1.1 200 OK
  2237  
  2238      {
  2239           "Status": "Login Succeeded",
  2240           "IdentityToken": "9cbaf023786cd7..."
  2241      }
  2242  
  2243  **Status codes**:
  2244  
  2245  -   **200** – no error
  2246  -   **204** – no error
  2247  -   **500** – server error
  2248  
  2249  #### Display system-wide information
  2250  
  2251  `GET /info`
  2252  
  2253  Display system-wide information
  2254  
  2255  **Example request**:
  2256  
  2257      GET /v1.24/info HTTP/1.1
  2258  
  2259  **Example response**:
  2260  
  2261      HTTP/1.1 200 OK
  2262      Content-Type: application/json
  2263  
  2264      {
  2265          "Architecture": "x86_64",
  2266          "ClusterStore": "etcd://localhost:2379",
  2267          "CgroupDriver": "cgroupfs",
  2268          "Containers": 11,
  2269          "ContainersRunning": 7,
  2270          "ContainersStopped": 3,
  2271          "ContainersPaused": 1,
  2272          "CpuCfsPeriod": true,
  2273          "CpuCfsQuota": true,
  2274          "Debug": false,
  2275          "DockerRootDir": "/var/lib/docker",
  2276          "Driver": "btrfs",
  2277          "DriverStatus": [[""]],
  2278          "ExperimentalBuild": false,
  2279          "HttpProxy": "http://test:test@localhost:8080",
  2280          "HttpsProxy": "https://test:test@localhost:8080",
  2281          "ID": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS",
  2282          "IPv4Forwarding": true,
  2283          "Images": 16,
  2284          "IndexServerAddress": "https://index.docker.io/v1/",
  2285          "InitPath": "/usr/bin/docker",
  2286          "InitSha1": "",
  2287          "KernelMemory": true,
  2288          "KernelVersion": "3.12.0-1-amd64",
  2289          "Labels": [
  2290              "storage=ssd"
  2291          ],
  2292          "MemTotal": 2099236864,
  2293          "MemoryLimit": true,
  2294          "NCPU": 1,
  2295          "NEventsListener": 0,
  2296          "NFd": 11,
  2297          "NGoroutines": 21,
  2298          "Name": "prod-server-42",
  2299          "NoProxy": "9.81.1.160",
  2300          "OomKillDisable": true,
  2301          "OSType": "linux",
  2302          "OperatingSystem": "Boot2Docker",
  2303          "Plugins": {
  2304              "Volume": [
  2305                  "local"
  2306              ],
  2307              "Network": [
  2308                  "null",
  2309                  "host",
  2310                  "bridge"
  2311              ]
  2312          },
  2313          "RegistryConfig": {
  2314              "IndexConfigs": {
  2315                  "docker.io": {
  2316                      "Mirrors": null,
  2317                      "Name": "docker.io",
  2318                      "Official": true,
  2319                      "Secure": true
  2320                  }
  2321              },
  2322              "InsecureRegistryCIDRs": [
  2323                  "127.0.0.0/8"
  2324              ]
  2325          },
  2326          "SecurityOptions": [
  2327              "apparmor",
  2328              "seccomp",
  2329              "selinux"
  2330          ],
  2331          "ServerVersion": "1.9.0",
  2332          "SwapLimit": false,
  2333          "SystemStatus": [["State", "Healthy"]],
  2334          "SystemTime": "2015-03-10T11:11:23.730591467-07:00"
  2335      }
  2336  
  2337  **Status codes**:
  2338  
  2339  -   **200** – no error
  2340  -   **500** – server error
  2341  
  2342  #### Show the docker version information
  2343  
  2344  `GET /version`
  2345  
  2346  Show the docker version information
  2347  
  2348  **Example request**:
  2349  
  2350      GET /v1.24/version HTTP/1.1
  2351  
  2352  **Example response**:
  2353  
  2354      HTTP/1.1 200 OK
  2355      Content-Type: application/json
  2356  
  2357      {
  2358           "Version": "1.12.0",
  2359           "Os": "linux",
  2360           "KernelVersion": "3.19.0-23-generic",
  2361           "GoVersion": "go1.6.3",
  2362           "GitCommit": "deadbee",
  2363           "Arch": "amd64",
  2364           "ApiVersion": "1.24",
  2365           "BuildTime": "2016-06-14T07:09:13.444803460+00:00",
  2366           "Experimental": true
  2367      }
  2368  
  2369  **Status codes**:
  2370  
  2371  -   **200** – no error
  2372  -   **500** – server error
  2373  
  2374  #### Ping the docker server
  2375  
  2376  `GET /_ping`
  2377  
  2378  Ping the docker server
  2379  
  2380  **Example request**:
  2381  
  2382      GET /v1.24/_ping HTTP/1.1
  2383  
  2384  **Example response**:
  2385  
  2386      HTTP/1.1 200 OK
  2387      Content-Type: text/plain
  2388  
  2389      OK
  2390  
  2391  **Status codes**:
  2392  
  2393  -   **200** - no error
  2394  -   **500** - server error
  2395  
  2396  #### Create a new image from a container's changes
  2397  
  2398  `POST /commit`
  2399  
  2400  Create a new image from a container's changes
  2401  
  2402  **Example request**:
  2403  
  2404      POST /v1.24/commit?container=44c004db4b17&comment=message&repo=myrepo HTTP/1.1
  2405      Content-Type: application/json
  2406      Content-Length: 12345
  2407  
  2408      {
  2409           "Hostname": "",
  2410           "Domainname": "",
  2411           "User": "",
  2412           "AttachStdin": false,
  2413           "AttachStdout": true,
  2414           "AttachStderr": true,
  2415           "Tty": false,
  2416           "OpenStdin": false,
  2417           "StdinOnce": false,
  2418           "Env": null,
  2419           "Cmd": [
  2420                   "date"
  2421           ],
  2422           "Mounts": [
  2423             {
  2424               "Source": "/data",
  2425               "Destination": "/data",
  2426               "Mode": "ro,Z",
  2427               "RW": false
  2428             }
  2429           ],
  2430           "Labels": {
  2431                   "key1": "value1",
  2432                   "key2": "value2"
  2433            },
  2434           "WorkingDir": "",
  2435           "NetworkDisabled": false,
  2436           "ExposedPorts": {
  2437                   "22/tcp": {}
  2438           }
  2439      }
  2440  
  2441  **Example response**:
  2442  
  2443      HTTP/1.1 201 Created
  2444      Content-Type: application/json
  2445  
  2446      {"Id": "596069db4bf5"}
  2447  
  2448  **JSON parameters**:
  2449  
  2450  -  **config** - the container's configuration
  2451  
  2452  **Query parameters**:
  2453  
  2454  -   **container** – source container
  2455  -   **repo** – repository
  2456  -   **tag** – tag
  2457  -   **comment** – commit message
  2458  -   **author** – author (e.g., "John Hannibal Smith
  2459      <[hannibal@a-team.com](mailto:hannibal%40a-team.com)>")
  2460  -   **pause** – 1/True/true or 0/False/false, whether to pause the container before committing
  2461  -   **changes** – Dockerfile instructions to apply while committing
  2462  
  2463  **Status codes**:
  2464  
  2465  -   **201** – no error
  2466  -   **404** – no such container
  2467  -   **500** – server error
  2468  
  2469  #### Monitor Docker's events
  2470  
  2471  `GET /events`
  2472  
  2473  Get container events from docker, in real time via streaming.
  2474  
  2475  Docker containers report the following events:
  2476  
  2477      attach, commit, copy, create, destroy, detach, die, exec_create, exec_detach, exec_start, export, health_status, kill, oom, pause, rename, resize, restart, start, stop, top, unpause, update
  2478  
  2479  Docker images report the following events:
  2480  
  2481      delete, import, load, pull, push, save, tag, untag
  2482  
  2483  Docker volumes report the following events:
  2484  
  2485      create, mount, unmount, destroy
  2486  
  2487  Docker networks report the following events:
  2488  
  2489      create, connect, disconnect, destroy
  2490  
  2491  Docker daemon report the following event:
  2492  
  2493      reload
  2494  
  2495  **Example request**:
  2496  
  2497      GET /v1.24/events?since=1374067924
  2498  
  2499  **Example response**:
  2500  
  2501      HTTP/1.1 200 OK
  2502      Content-Type: application/json
  2503      Server: Docker/1.12.0 (linux)
  2504      Date: Fri, 29 Apr 2016 15:18:06 GMT
  2505      Transfer-Encoding: chunked
  2506  
  2507      {
  2508        "status": "pull",
  2509        "id": "alpine:latest",
  2510        "Type": "image",
  2511        "Action": "pull",
  2512        "Actor": {
  2513          "ID": "alpine:latest",
  2514          "Attributes": {
  2515            "name": "alpine"
  2516          }
  2517        },
  2518        "time": 1461943101,
  2519        "timeNano": 1461943101301854122
  2520      }
  2521      {
  2522        "status": "create",
  2523        "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",
  2524        "from": "alpine",
  2525        "Type": "container",
  2526        "Action": "create",
  2527        "Actor": {
  2528          "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",
  2529          "Attributes": {
  2530            "com.example.some-label": "some-label-value",
  2531            "image": "alpine",
  2532            "name": "my-container"
  2533          }
  2534        },
  2535        "time": 1461943101,
  2536        "timeNano": 1461943101381709551
  2537      }
  2538      {
  2539        "status": "attach",
  2540        "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",
  2541        "from": "alpine",
  2542        "Type": "container",
  2543        "Action": "attach",
  2544        "Actor": {
  2545          "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",
  2546          "Attributes": {
  2547            "com.example.some-label": "some-label-value",
  2548            "image": "alpine",
  2549            "name": "my-container"
  2550          }
  2551        },
  2552        "time": 1461943101,
  2553        "timeNano": 1461943101383858412
  2554      }
  2555      {
  2556        "Type": "network",
  2557        "Action": "connect",
  2558        "Actor": {
  2559          "ID": "7dc8ac97d5d29ef6c31b6052f3938c1e8f2749abbd17d1bd1febf2608db1b474",
  2560          "Attributes": {
  2561            "container": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",
  2562            "name": "bridge",
  2563            "type": "bridge"
  2564          }
  2565        },
  2566        "time": 1461943101,
  2567        "timeNano": 1461943101394865557
  2568      }
  2569      {
  2570        "status": "start",
  2571        "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",
  2572        "from": "alpine",
  2573        "Type": "container",
  2574        "Action": "start",
  2575        "Actor": {
  2576          "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",
  2577          "Attributes": {
  2578            "com.example.some-label": "some-label-value",
  2579            "image": "alpine",
  2580            "name": "my-container"
  2581          }
  2582        },
  2583        "time": 1461943101,
  2584        "timeNano": 1461943101607533796
  2585      }
  2586      {
  2587        "status": "resize",
  2588        "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",
  2589        "from": "alpine",
  2590        "Type": "container",
  2591        "Action": "resize",
  2592        "Actor": {
  2593          "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",
  2594          "Attributes": {
  2595            "com.example.some-label": "some-label-value",
  2596            "height": "46",
  2597            "image": "alpine",
  2598            "name": "my-container",
  2599            "width": "204"
  2600          }
  2601        },
  2602        "time": 1461943101,
  2603        "timeNano": 1461943101610269268
  2604      }
  2605      {
  2606        "status": "die",
  2607        "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",
  2608        "from": "alpine",
  2609        "Type": "container",
  2610        "Action": "die",
  2611        "Actor": {
  2612          "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",
  2613          "Attributes": {
  2614            "com.example.some-label": "some-label-value",
  2615            "exitCode": "0",
  2616            "image": "alpine",
  2617            "name": "my-container"
  2618          }
  2619        },
  2620        "time": 1461943105,
  2621        "timeNano": 1461943105079144137
  2622      }
  2623      {
  2624        "Type": "network",
  2625        "Action": "disconnect",
  2626        "Actor": {
  2627          "ID": "7dc8ac97d5d29ef6c31b6052f3938c1e8f2749abbd17d1bd1febf2608db1b474",
  2628          "Attributes": {
  2629            "container": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",
  2630            "name": "bridge",
  2631            "type": "bridge"
  2632          }
  2633        },
  2634        "time": 1461943105,
  2635        "timeNano": 1461943105230860245
  2636      }
  2637      {
  2638        "status": "destroy",
  2639        "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",
  2640        "from": "alpine",
  2641        "Type": "container",
  2642        "Action": "destroy",
  2643        "Actor": {
  2644          "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",
  2645          "Attributes": {
  2646            "com.example.some-label": "some-label-value",
  2647            "image": "alpine",
  2648            "name": "my-container"
  2649          }
  2650        },
  2651        "time": 1461943105,
  2652        "timeNano": 1461943105338056026
  2653      }
  2654  
  2655  **Query parameters**:
  2656  
  2657  -   **since** – Timestamp. Show all events created since timestamp and then stream
  2658  -   **until** – Timestamp. Show events created until given timestamp and stop streaming
  2659  -   **filters** – A json encoded value of the filters (a map[string][]string) to process on the event list. Available filters:
  2660    -   `container=<string>`; -- container to filter
  2661    -   `event=<string>`; -- event to filter
  2662    -   `image=<string>`; -- image to filter
  2663    -   `label=<string>`; -- image and container label to filter
  2664    -   `type=<string>`; -- either `container` or `image` or `volume` or `network` or `daemon`
  2665    -   `volume=<string>`; -- volume to filter
  2666    -   `network=<string>`; -- network to filter
  2667    -   `daemon=<string>`; -- daemon name or id to filter
  2668  
  2669  **Status codes**:
  2670  
  2671  -   **200** – no error
  2672  -   **400** - bad parameter
  2673  -   **500** – server error
  2674  
  2675  #### Get a tarball containing all images in a repository
  2676  
  2677  `GET /images/(name)/get`
  2678  
  2679  Get a tarball containing all images and metadata for the repository specified
  2680  by `name`.
  2681  
  2682  If `name` is a specific name and tag (e.g. ubuntu:latest), then only that image
  2683  (and its parents) are returned. If `name` is an image ID, similarly only that
  2684  image (and its parents) are returned, but with the exclusion of the
  2685  'repositories' file in the tarball, as there were no image names referenced.
  2686  
  2687  See the [image tarball format](#image-tarball-format) for more details.
  2688  
  2689  **Example request**
  2690  
  2691      GET /v1.24/images/ubuntu/get
  2692  
  2693  **Example response**:
  2694  
  2695      HTTP/1.1 200 OK
  2696      Content-Type: application/x-tar
  2697  
  2698      Binary data stream
  2699  
  2700  **Status codes**:
  2701  
  2702  -   **200** – no error
  2703  -   **500** – server error
  2704  
  2705  #### Get a tarball containing all images
  2706  
  2707  `GET /images/get`
  2708  
  2709  Get a tarball containing all images and metadata for one or more repositories.
  2710  
  2711  For each value of the `names` parameter: if it is a specific name and tag (e.g.
  2712  `ubuntu:latest`), then only that image (and its parents) are returned; if it is
  2713  an image ID, similarly only that image (and its parents) are returned and there
  2714  would be no names referenced in the 'repositories' file for this image ID.
  2715  
  2716  See the [image tarball format](#image-tarball-format) for more details.
  2717  
  2718  **Example request**
  2719  
  2720      GET /v1.24/images/get?names=myname%2Fmyapp%3Alatest&names=busybox
  2721  
  2722  **Example response**:
  2723  
  2724      HTTP/1.1 200 OK
  2725      Content-Type: application/x-tar
  2726  
  2727      Binary data stream
  2728  
  2729  **Status codes**:
  2730  
  2731  -   **200** – no error
  2732  -   **500** – server error
  2733  
  2734  #### Load a tarball with a set of images and tags into docker
  2735  
  2736  `POST /images/load`
  2737  
  2738  Load a set of images and tags into a Docker repository.
  2739  See the [image tarball format](#image-tarball-format) for more details.
  2740  
  2741  **Example request**
  2742  
  2743      POST /v1.24/images/load
  2744      Content-Type: application/x-tar
  2745      Content-Length: 12345
  2746  
  2747      Tarball in body
  2748  
  2749  **Example response**:
  2750  
  2751      HTTP/1.1 200 OK
  2752      Content-Type: application/json
  2753      Transfer-Encoding: chunked
  2754  
  2755      {"status":"Loading layer","progressDetail":{"current":32768,"total":1292800},"progress":"[=                                                 ] 32.77 kB/1.293 MB","id":"8ac8bfaff55a"}
  2756      {"status":"Loading layer","progressDetail":{"current":65536,"total":1292800},"progress":"[==                                                ] 65.54 kB/1.293 MB","id":"8ac8bfaff55a"}
  2757      {"status":"Loading layer","progressDetail":{"current":98304,"total":1292800},"progress":"[===                                               ]  98.3 kB/1.293 MB","id":"8ac8bfaff55a"}
  2758      {"status":"Loading layer","progressDetail":{"current":131072,"total":1292800},"progress":"[=====                                             ] 131.1 kB/1.293 MB","id":"8ac8bfaff55a"}
  2759      ...
  2760      {"stream":"Loaded image: busybox:latest\n"}
  2761  
  2762  **Example response**:
  2763  
  2764  If the "quiet" query parameter is set to `true` / `1` (`?quiet=1`), progress
  2765  details are suppressed, and only a confirmation message is returned once the
  2766  action completes.
  2767  
  2768      HTTP/1.1 200 OK
  2769      Content-Type: application/json
  2770      Transfer-Encoding: chunked
  2771  
  2772      {"stream":"Loaded image: busybox:latest\n"}
  2773  
  2774  **Query parameters**:
  2775  
  2776  -   **quiet** – Boolean value, suppress progress details during load. Defaults
  2777        to `0` / `false` if omitted.
  2778  
  2779  **Status codes**:
  2780  
  2781  -   **200** – no error
  2782  -   **500** – server error
  2783  
  2784  #### Image tarball format
  2785  
  2786  An image tarball contains one directory per image layer (named using its long ID),
  2787  each containing these files:
  2788  
  2789  - `VERSION`: currently `1.0` - the file format version
  2790  - `json`: detailed layer information, similar to `docker inspect layer_id`
  2791  - `layer.tar`: A tarfile containing the filesystem changes in this layer
  2792  
  2793  The `layer.tar` file contains `aufs` style `.wh..wh.aufs` files and directories
  2794  for storing attribute changes and deletions.
  2795  
  2796  If the tarball defines a repository, the tarball should also include a `repositories` file at
  2797  the root that contains a list of repository and tag names mapped to layer IDs.
  2798  
  2799  ```
  2800  {"hello-world":
  2801      {"latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1"}
  2802  }
  2803  ```
  2804  
  2805  #### Exec Create
  2806  
  2807  `POST /containers/(id or name)/exec`
  2808  
  2809  Sets up an exec instance in a running container `id`
  2810  
  2811  **Example request**:
  2812  
  2813      POST /v1.24/containers/e90e34656806/exec HTTP/1.1
  2814      Content-Type: application/json
  2815      Content-Length: 12345
  2816  
  2817      {
  2818        "AttachStdin": true,
  2819        "AttachStdout": true,
  2820        "AttachStderr": true,
  2821        "Cmd": ["sh"],
  2822        "DetachKeys": "ctrl-p,ctrl-q",
  2823        "Privileged": true,
  2824        "Tty": true,
  2825        "User": "123:456"
  2826      }
  2827  
  2828  **Example response**:
  2829  
  2830      HTTP/1.1 201 Created
  2831      Content-Type: application/json
  2832  
  2833      {
  2834           "Id": "f90e34656806",
  2835           "Warnings":[]
  2836      }
  2837  
  2838  **JSON parameters**:
  2839  
  2840  -   **AttachStdin** - Boolean value, attaches to `stdin` of the `exec` command.
  2841  -   **AttachStdout** - Boolean value, attaches to `stdout` of the `exec` command.
  2842  -   **AttachStderr** - Boolean value, attaches to `stderr` of the `exec` command.
  2843  -   **DetachKeys** – Override the key sequence for detaching a
  2844          container. Format is a single character `[a-Z]` or `ctrl-<value>`
  2845          where `<value>` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`.
  2846  -   **Tty** - Boolean value to allocate a pseudo-TTY.
  2847  -   **Cmd** - Command to run specified as a string or an array of strings.
  2848  -   **Privileged** - Boolean value, runs the exec process with extended privileges.
  2849  -   **User** - A string value specifying the user, and optionally, group to run
  2850          the exec process inside the container. Format is one of: `"user"`,
  2851          `"user:group"`, `"uid"`, or `"uid:gid"`.
  2852  
  2853  **Status codes**:
  2854  
  2855  -   **201** – no error
  2856  -   **404** – no such container
  2857  -   **409** - container is paused
  2858  -   **500** - server error
  2859  
  2860  #### Exec Start
  2861  
  2862  `POST /exec/(id)/start`
  2863  
  2864  Starts a previously set up `exec` instance `id`. If `detach` is true, this API
  2865  returns after starting the `exec` command. Otherwise, this API sets up an
  2866  interactive session with the `exec` command.
  2867  
  2868  **Example request**:
  2869  
  2870      POST /v1.24/exec/e90e34656806/start HTTP/1.1
  2871      Content-Type: application/json
  2872      Content-Length: 12345
  2873  
  2874      {
  2875       "Detach": false,
  2876       "Tty": false
  2877      }
  2878  
  2879  **Example response**:
  2880  
  2881      HTTP/1.1 200 OK
  2882      Content-Type: application/vnd.docker.raw-stream
  2883  
  2884      {% raw %}
  2885      {{ STREAM }}
  2886      {% endraw %}
  2887  
  2888  **JSON parameters**:
  2889  
  2890  -   **Detach** - Detach from the `exec` command.
  2891  -   **Tty** - Boolean value to allocate a pseudo-TTY.
  2892  
  2893  **Status codes**:
  2894  
  2895  -   **200** – no error
  2896  -   **404** – no such exec instance
  2897  -   **409** - container is paused
  2898  
  2899  **Stream details**:
  2900  
  2901  Similar to the stream behavior of `POST /containers/(id or name)/attach` API
  2902  
  2903  #### Exec Resize
  2904  
  2905  `POST /exec/(id)/resize`
  2906  
  2907  Resizes the `tty` session used by the `exec` command `id`.  The unit is number of characters.
  2908  This API is valid only if `tty` was specified as part of creating and starting the `exec` command.
  2909  
  2910  **Example request**:
  2911  
  2912      POST /v1.24/exec/e90e34656806/resize?h=40&w=80 HTTP/1.1
  2913      Content-Type: text/plain
  2914  
  2915  **Example response**:
  2916  
  2917      HTTP/1.1 201 Created
  2918      Content-Type: text/plain
  2919  
  2920  **Query parameters**:
  2921  
  2922  -   **h** – height of `tty` session
  2923  -   **w** – width
  2924  
  2925  **Status codes**:
  2926  
  2927  -   **201** – no error
  2928  -   **404** – no such exec instance
  2929  
  2930  #### Exec Inspect
  2931  
  2932  `GET /exec/(id)/json`
  2933  
  2934  Return low-level information about the `exec` command `id`.
  2935  
  2936  **Example request**:
  2937  
  2938      GET /v1.24/exec/11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39/json HTTP/1.1
  2939  
  2940  **Example response**:
  2941  
  2942      HTTP/1.1 200 OK
  2943      Content-Type: application/json
  2944  
  2945      {
  2946        "CanRemove": false,
  2947        "ContainerID": "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126",
  2948        "DetachKeys": "",
  2949        "ExitCode": 2,
  2950        "ID": "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b",
  2951        "OpenStderr": true,
  2952        "OpenStdin": true,
  2953        "OpenStdout": true,
  2954        "ProcessConfig": {
  2955          "arguments": [
  2956            "-c",
  2957            "exit 2"
  2958          ],
  2959          "entrypoint": "sh",
  2960          "privileged": false,
  2961          "tty": true,
  2962          "user": "1000"
  2963        },
  2964        "Running": false
  2965      }
  2966  
  2967  **Status codes**:
  2968  
  2969  -   **200** – no error
  2970  -   **404** – no such exec instance
  2971  -   **500** - server error
  2972  
  2973  ### 3.4 Volumes
  2974  
  2975  #### List volumes
  2976  
  2977  `GET /volumes`
  2978  
  2979  **Example request**:
  2980  
  2981      GET /v1.24/volumes HTTP/1.1
  2982  
  2983  **Example response**:
  2984  
  2985      HTTP/1.1 200 OK
  2986      Content-Type: application/json
  2987  
  2988      {
  2989        "Volumes": [
  2990          {
  2991            "Name": "tardis",
  2992            "Driver": "local",
  2993            "Mountpoint": "/var/lib/docker/volumes/tardis",
  2994            "Labels": null,
  2995            "Scope": "local"
  2996          }
  2997        ],
  2998        "Warnings": []
  2999      }
  3000  
  3001  **Query parameters**:
  3002  
  3003  - **filters** - JSON encoded value of the filters (a `map[string][]string`) to process on the volumes list. Available filters:
  3004    -   `name=<volume-name>` Matches all or part of a volume name.
  3005    -   `dangling=<boolean>` When set to `true` (or `1`), returns all volumes that are "dangling" (not in use by a container). When set to `false` (or `0`), only volumes that are in use by one or more containers are returned.
  3006    -   `driver=<volume-driver-name>` Matches all or part of a volume driver name.
  3007  
  3008  **Status codes**:
  3009  
  3010  -   **200** - no error
  3011  -   **500** - server error
  3012  
  3013  #### Create a volume
  3014  
  3015  `POST /volumes/create`
  3016  
  3017  Create a volume
  3018  
  3019  **Example request**:
  3020  
  3021      POST /v1.24/volumes/create HTTP/1.1
  3022      Content-Type: application/json
  3023      Content-Length: 12345
  3024  
  3025      {
  3026        "Name": "tardis",
  3027        "Labels": {
  3028          "com.example.some-label": "some-value",
  3029          "com.example.some-other-label": "some-other-value"
  3030        },
  3031        "Driver": "custom"
  3032      }
  3033  
  3034  **Example response**:
  3035  
  3036      HTTP/1.1 201 Created
  3037      Content-Type: application/json
  3038  
  3039      {
  3040        "Name": "tardis",
  3041        "Driver": "custom",
  3042        "Mountpoint": "/var/lib/docker/volumes/tardis",
  3043        "Status": {
  3044          "hello": "world"
  3045        },
  3046        "Labels": {
  3047          "com.example.some-label": "some-value",
  3048          "com.example.some-other-label": "some-other-value"
  3049        },
  3050        "Scope": "local"
  3051      }
  3052  
  3053  **Status codes**:
  3054  
  3055  - **201** - no error
  3056  - **500**  - server error
  3057  
  3058  **JSON parameters**:
  3059  
  3060  - **Name** - The new volume's name. If not specified, Docker generates a name.
  3061  - **Driver** - Name of the volume driver to use. Defaults to `local` for the name.
  3062  - **DriverOpts** - A mapping of driver options and values. These options are
  3063      passed directly to the driver and are driver specific.
  3064  - **Labels** - Labels to set on the volume, specified as a map: `{"key":"value","key2":"value2"}`
  3065  
  3066  **JSON fields in response**:
  3067  
  3068  Refer to the [inspect a volume](#inspect-a-volume) section or details about the
  3069  JSON fields returned in the response.
  3070  
  3071  #### Inspect a volume
  3072  
  3073  `GET /volumes/(name)`
  3074  
  3075  Return low-level information on the volume `name`
  3076  
  3077  **Example request**:
  3078  
  3079      GET /v1.24/volumes/tardis
  3080  
  3081  **Example response**:
  3082  
  3083      HTTP/1.1 200 OK
  3084      Content-Type: application/json
  3085  
  3086      {
  3087        "Name": "tardis",
  3088        "Driver": "custom",
  3089        "Mountpoint": "/var/lib/docker/volumes/tardis/_data",
  3090        "Status": {
  3091          "hello": "world"
  3092        },
  3093        "Labels": {
  3094            "com.example.some-label": "some-value",
  3095            "com.example.some-other-label": "some-other-value"
  3096        },
  3097        "Scope": "local"
  3098      }
  3099  
  3100  **Status codes**:
  3101  
  3102  -   **200** - no error
  3103  -   **404** - no such volume
  3104  -   **500** - server error
  3105  
  3106  **JSON fields in response**:
  3107  
  3108  The following fields can be returned in the API response. Empty fields, or
  3109  fields that are not supported by the volume's driver may be omitted in the
  3110  response.
  3111  
  3112  - **Name** - Name of the volume.
  3113  - **Driver** - Name of the volume driver used by the volume.
  3114  - **Mountpoint** - Mount path of the volume on the host.
  3115  - **Status** - Low-level details about the volume, provided by the volume driver.
  3116      Details are returned as a map with key/value pairs: `{"key":"value","key2":"value2"}`.
  3117      The `Status` field is optional, and is omitted if the volume driver does not
  3118      support this feature.
  3119  - **Labels** - Labels set on the volume, specified as a map: `{"key":"value","key2":"value2"}`.
  3120  - **Scope** - Scope describes the level at which the volume exists, can be one of
  3121      `global` for cluster-wide or `local` for machine level. The default is `local`.
  3122  
  3123  #### Remove a volume
  3124  
  3125  `DELETE /volumes/(name)`
  3126  
  3127  Instruct the driver to remove the volume (`name`).
  3128  
  3129  **Example request**:
  3130  
  3131      DELETE /v1.24/volumes/tardis HTTP/1.1
  3132  
  3133  **Example response**:
  3134  
  3135      HTTP/1.1 204 No Content
  3136  
  3137  **Status codes**:
  3138  
  3139  -   **204** - no error
  3140  -   **404** - no such volume or volume driver
  3141  -   **409** - volume is in use and cannot be removed
  3142  -   **500** - server error
  3143  
  3144  ### 3.5 Networks
  3145  
  3146  #### List networks
  3147  
  3148  `GET /networks`
  3149  
  3150  **Example request**:
  3151  
  3152      GET /v1.24/networks?filters={"type":{"custom":true}} HTTP/1.1
  3153  
  3154  **Example response**:
  3155  
  3156  ```
  3157  HTTP/1.1 200 OK
  3158  Content-Type: application/json
  3159  
  3160  [
  3161    {
  3162      "Name": "bridge",
  3163      "Id": "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566",
  3164      "Scope": "local",
  3165      "Driver": "bridge",
  3166      "EnableIPv6": false,
  3167      "Internal": false,
  3168      "IPAM": {
  3169        "Driver": "default",
  3170        "Config": [
  3171          {
  3172            "Subnet": "172.17.0.0/16"
  3173          }
  3174        ]
  3175      },
  3176      "Containers": {
  3177        "39b69226f9d79f5634485fb236a23b2fe4e96a0a94128390a7fbbcc167065867": {
  3178          "EndpointID": "ed2419a97c1d9954d05b46e462e7002ea552f216e9b136b80a7db8d98b442eda",
  3179          "MacAddress": "02:42:ac:11:00:02",
  3180          "IPv4Address": "172.17.0.2/16",
  3181          "IPv6Address": ""
  3182        }
  3183      },
  3184      "Options": {
  3185        "com.docker.network.bridge.default_bridge": "true",
  3186        "com.docker.network.bridge.enable_icc": "true",
  3187        "com.docker.network.bridge.enable_ip_masquerade": "true",
  3188        "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
  3189        "com.docker.network.bridge.name": "docker0",
  3190        "com.docker.network.driver.mtu": "1500"
  3191      }
  3192    },
  3193    {
  3194      "Name": "none",
  3195      "Id": "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794",
  3196      "Scope": "local",
  3197      "Driver": "null",
  3198      "EnableIPv6": false,
  3199      "Internal": false,
  3200      "IPAM": {
  3201        "Driver": "default",
  3202        "Config": []
  3203      },
  3204      "Containers": {},
  3205      "Options": {}
  3206    },
  3207    {
  3208      "Name": "host",
  3209      "Id": "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e",
  3210      "Scope": "local",
  3211      "Driver": "host",
  3212      "EnableIPv6": false,
  3213      "Internal": false,
  3214      "IPAM": {
  3215        "Driver": "default",
  3216        "Config": []
  3217      },
  3218      "Containers": {},
  3219      "Options": {}
  3220    }
  3221  ]
  3222  ```
  3223  
  3224  **Query parameters**:
  3225  
  3226  - **filters** - JSON encoded network list filter. The filter value is one of:
  3227    -   `driver=<driver-name>` Matches a network's driver.
  3228    -   `id=<network-id>` Matches all or part of a network id.
  3229    -   `label=<key>` or `label=<key>=<value>` of a network label.
  3230    -   `name=<network-name>` Matches all or part of a network name.
  3231    -   `type=["custom"|"builtin"]` Filters networks by type. The `custom` keyword returns all user-defined networks.
  3232  
  3233  **Status codes**:
  3234  
  3235  -   **200** - no error
  3236  -   **500** - server error
  3237  
  3238  #### Inspect network
  3239  
  3240  `GET /networks/(id or name)`
  3241  
  3242  Return low-level information on the network `id`
  3243  
  3244  **Example request**:
  3245  
  3246      GET /v1.24/networks/7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99 HTTP/1.1
  3247  
  3248  **Example response**:
  3249  
  3250  ```
  3251  HTTP/1.1 200 OK
  3252  Content-Type: application/json
  3253  
  3254  {
  3255    "Name": "net01",
  3256    "Id": "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99",
  3257    "Scope": "local",
  3258    "Driver": "bridge",
  3259    "EnableIPv6": false,
  3260    "IPAM": {
  3261      "Driver": "default",
  3262      "Config": [
  3263        {
  3264          "Subnet": "172.19.0.0/16",
  3265          "Gateway": "172.19.0.1"
  3266        }
  3267      ],
  3268      "Options": {
  3269          "foo": "bar"
  3270      }
  3271    },
  3272    "Internal": false,
  3273    "Containers": {
  3274      "19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c": {
  3275        "Name": "test",
  3276        "EndpointID": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a",
  3277        "MacAddress": "02:42:ac:13:00:02",
  3278        "IPv4Address": "172.19.0.2/16",
  3279        "IPv6Address": ""
  3280      }
  3281    },
  3282    "Options": {
  3283      "com.docker.network.bridge.default_bridge": "true",
  3284      "com.docker.network.bridge.enable_icc": "true",
  3285      "com.docker.network.bridge.enable_ip_masquerade": "true",
  3286      "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
  3287      "com.docker.network.bridge.name": "docker0",
  3288      "com.docker.network.driver.mtu": "1500"
  3289    },
  3290    "Labels": {
  3291      "com.example.some-label": "some-value",
  3292      "com.example.some-other-label": "some-other-value"
  3293    }
  3294  }
  3295  ```
  3296  
  3297  **Status codes**:
  3298  
  3299  -   **200** - no error
  3300  -   **404** - network not found
  3301  -   **500** - server error
  3302  
  3303  #### Create a network
  3304  
  3305  `POST /networks/create`
  3306  
  3307  Create a network
  3308  
  3309  **Example request**:
  3310  
  3311  ```
  3312  POST /v1.24/networks/create HTTP/1.1
  3313  Content-Type: application/json
  3314  Content-Length: 12345
  3315  
  3316  {
  3317    "Name":"isolated_nw",
  3318    "CheckDuplicate":true,
  3319    "Driver":"bridge",
  3320    "EnableIPv6": true,
  3321    "IPAM":{
  3322      "Driver": "default",
  3323      "Config":[
  3324        {
  3325          "Subnet":"172.20.0.0/16",
  3326          "IPRange":"172.20.10.0/24",
  3327          "Gateway":"172.20.10.11"
  3328        },
  3329        {
  3330          "Subnet":"2001:db8:abcd::/64",
  3331          "Gateway":"2001:db8:abcd::1011"
  3332        }
  3333      ],
  3334      "Options": {
  3335        "foo": "bar"
  3336      }
  3337    },
  3338    "Internal":true,
  3339    "Options": {
  3340      "com.docker.network.bridge.default_bridge": "true",
  3341      "com.docker.network.bridge.enable_icc": "true",
  3342      "com.docker.network.bridge.enable_ip_masquerade": "true",
  3343      "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
  3344      "com.docker.network.bridge.name": "docker0",
  3345      "com.docker.network.driver.mtu": "1500"
  3346    },
  3347    "Labels": {
  3348      "com.example.some-label": "some-value",
  3349      "com.example.some-other-label": "some-other-value"
  3350    }
  3351  }
  3352  ```
  3353  
  3354  **Example response**:
  3355  
  3356  ```
  3357  HTTP/1.1 201 Created
  3358  Content-Type: application/json
  3359  
  3360  {
  3361    "Id": "22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30",
  3362    "Warning": ""
  3363  }
  3364  ```
  3365  
  3366  **Status codes**:
  3367  
  3368  - **201** - no error
  3369  - **403** - operation not supported for pre-defined networks
  3370  - **404** - plugin not found
  3371  - **500** - server error
  3372  
  3373  **JSON parameters**:
  3374  
  3375  - **Name** - The new network's name. this is a mandatory field
  3376  - **CheckDuplicate** - Requests daemon to check for networks with same name. Defaults to `false`.
  3377      Since Network is primarily keyed based on a random ID and not on the name, 
  3378      and network name is strictly a user-friendly alias to the network 
  3379      which is uniquely identified using ID, there is no guaranteed way to check for duplicates. 
  3380      This parameter CheckDuplicate is there to provide a best effort checking of any networks 
  3381      which has the same name but it is not guaranteed to catch all name collisions.
  3382  - **Driver** - Name of the network driver plugin to use. Defaults to `bridge` driver
  3383  - **Internal** - Restrict external access to the network
  3384  - **IPAM** - Optional custom IP scheme for the network
  3385    - **Driver** - Name of the IPAM driver to use. Defaults to `default` driver
  3386    - **Config** - List of IPAM configuration options, specified as a map:
  3387        `{"Subnet": <CIDR>, "IPRange": <CIDR>, "Gateway": <IP address>, "AuxAddress": <device_name:IP address>}`
  3388    - **Options** - Driver-specific options, specified as a map: `{"option":"value" [,"option2":"value2"]}`
  3389  - **EnableIPv6** - Enable IPv6 on the network
  3390  - **Options** - Network specific options to be used by the drivers
  3391  - **Labels** - Labels to set on the network, specified as a map: `{"key":"value" [,"key2":"value2"]}`
  3392  
  3393  #### Connect a container to a network
  3394  
  3395  `POST /networks/(id or name)/connect`
  3396  
  3397  Connect a container to a network
  3398  
  3399  **Example request**:
  3400  
  3401  ```
  3402  POST /v1.24/networks/22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30/connect HTTP/1.1
  3403  Content-Type: application/json
  3404  Content-Length: 12345
  3405  
  3406  {
  3407    "Container":"3613f73ba0e4",
  3408    "EndpointConfig": {
  3409      "IPAMConfig": {
  3410          "IPv4Address":"172.24.56.89",
  3411          "IPv6Address":"2001:db8::5689"
  3412      }
  3413    }
  3414  }
  3415  ```
  3416  
  3417  **Example response**:
  3418  
  3419      HTTP/1.1 200 OK
  3420  
  3421  **Status codes**:
  3422  
  3423  - **200** - no error
  3424  - **403** - operation not supported for swarm scoped networks
  3425  - **404** - network or container is not found
  3426  - **500** - Internal Server Error
  3427  
  3428  **JSON parameters**:
  3429  
  3430  - **container** - container-id/name to be connected to the network
  3431  
  3432  #### Disconnect a container from a network
  3433  
  3434  `POST /networks/(id or name)/disconnect`
  3435  
  3436  Disconnect a container from a network
  3437  
  3438  **Example request**:
  3439  
  3440  ```
  3441  POST /v1.24/networks/22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30/disconnect HTTP/1.1
  3442  Content-Type: application/json
  3443  Content-Length: 12345
  3444  
  3445  {
  3446    "Container":"3613f73ba0e4",
  3447    "Force":false
  3448  }
  3449  ```
  3450  
  3451  **Example response**:
  3452  
  3453      HTTP/1.1 200 OK
  3454  
  3455  **Status codes**:
  3456  
  3457  - **200** - no error
  3458  - **403** - operation not supported for swarm scoped networks
  3459  - **404** - network or container not found
  3460  - **500** - Internal Server Error
  3461  
  3462  **JSON parameters**:
  3463  
  3464  - **Container** - container-id/name to be disconnected from a network
  3465  - **Force** - Force the container to disconnect from a network
  3466  
  3467  #### Remove a network
  3468  
  3469  `DELETE /networks/(id or name)`
  3470  
  3471  Instruct the driver to remove the network (`id`).
  3472  
  3473  **Example request**:
  3474  
  3475      DELETE /v1.24/networks/22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30 HTTP/1.1
  3476  
  3477  **Example response**:
  3478  
  3479      HTTP/1.1 204 No Content
  3480  
  3481  **Status codes**:
  3482  
  3483  -   **204** - no error
  3484  -   **403** - operation not supported for pre-defined networks
  3485  -   **404** - no such network
  3486  -   **500** - server error
  3487  
  3488  ### 3.6 Plugins (experimental)
  3489  
  3490  #### List plugins
  3491  
  3492  `GET /plugins`
  3493  
  3494  Returns information about installed plugins.
  3495  
  3496  **Example request**:
  3497  
  3498      GET /v1.24/plugins HTTP/1.1
  3499  
  3500  **Example response**:
  3501  
  3502  ```
  3503  HTTP/1.1 200 OK
  3504  Content-Type: application/json
  3505  
  3506  [
  3507    {
  3508      "Id": "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078",
  3509      "Name": "tiborvass/no-remove",
  3510      "Tag": "latest",
  3511      "Active": true,
  3512      "Config": {
  3513        "Mounts": [
  3514          {
  3515            "Name": "",
  3516            "Description": "",
  3517            "Settable": null,
  3518            "Source": "/data",
  3519            "Destination": "/data",
  3520            "Type": "bind",
  3521            "Options": [
  3522              "shared",
  3523              "rbind"
  3524            ]
  3525          },
  3526          {
  3527            "Name": "",
  3528            "Description": "",
  3529            "Settable": null,
  3530            "Source": null,
  3531            "Destination": "/foobar",
  3532            "Type": "tmpfs",
  3533            "Options": null
  3534          }
  3535        ],
  3536        "Env": [
  3537          "DEBUG=1"
  3538        ],
  3539        "Args": null,
  3540        "Devices": null
  3541      },
  3542      "Manifest": {
  3543        "ManifestVersion": "v0",
  3544        "Description": "A test plugin for Docker",
  3545        "Documentation": "https://docs.docker.com/engine/extend/plugins/",
  3546        "Interface": {
  3547          "Types": [
  3548            "docker.volumedriver/1.0"
  3549          ],
  3550          "Socket": "plugins.sock"
  3551        },
  3552        "Entrypoint": [
  3553          "plugin-no-remove",
  3554          "/data"
  3555        ],
  3556        "Workdir": "",
  3557        "User": {
  3558        },
  3559        "Network": {
  3560          "Type": "host"
  3561        },
  3562        "Capabilities": null,
  3563        "Mounts": [
  3564          {
  3565            "Name": "",
  3566            "Description": "",
  3567            "Settable": null,
  3568            "Source": "/data",
  3569            "Destination": "/data",
  3570            "Type": "bind",
  3571            "Options": [
  3572              "shared",
  3573              "rbind"
  3574            ]
  3575          },
  3576          {
  3577            "Name": "",
  3578            "Description": "",
  3579            "Settable": null,
  3580            "Source": null,
  3581            "Destination": "/foobar",
  3582            "Type": "tmpfs",
  3583            "Options": null
  3584          }
  3585        ],
  3586        "Devices": [
  3587          {
  3588            "Name": "device",
  3589            "Description": "a host device to mount",
  3590            "Settable": null,
  3591            "Path": "/dev/cpu_dma_latency"
  3592          }
  3593        ],
  3594        "Env": [
  3595          {
  3596            "Name": "DEBUG",
  3597            "Description": "If set, prints debug messages",
  3598            "Settable": null,
  3599            "Value": "1"
  3600          }
  3601        ],
  3602        "Args": {
  3603          "Name": "args",
  3604          "Description": "command line arguments",
  3605          "Settable": null,
  3606          "Value": [
  3607  
  3608          ]
  3609        }
  3610      }
  3611    }
  3612  ]
  3613  ```
  3614  
  3615  **Status codes**:
  3616  
  3617  -   **200** - no error
  3618  -   **500** - server error
  3619  
  3620  #### Install a plugin
  3621  
  3622  `POST /plugins/pull?name=<plugin name>`
  3623  
  3624  Pulls and installs a plugin. After the plugin is installed, it can be enabled
  3625  using the [`POST /plugins/(plugin name)/enable` endpoint](#enable-a-plugin).
  3626  
  3627  **Example request**:
  3628  
  3629  ```
  3630  POST /v1.24/plugins/pull?name=tiborvass/no-remove:latest HTTP/1.1
  3631  ```
  3632  
  3633  The `:latest` tag is optional, and is used as default if omitted. When using
  3634  this endpoint to pull a plugin from the registry, the `X-Registry-Auth` header
  3635  can be used to include a base64-encoded AuthConfig object. Refer to the [create
  3636  an image](#create-an-image) section for more details.
  3637  
  3638  **Example response**:
  3639  
  3640  ```
  3641  HTTP/1.1 200 OK
  3642  Content-Type: application/json
  3643  Content-Length: 175
  3644  
  3645  [
  3646    {
  3647      "Name": "network",
  3648      "Description": "",
  3649      "Value": [
  3650        "host"
  3651      ]
  3652    },
  3653    {
  3654      "Name": "mount",
  3655      "Description": "",
  3656      "Value": [
  3657        "/data"
  3658      ]
  3659    },
  3660    {
  3661      "Name": "device",
  3662      "Description": "",
  3663      "Value": [
  3664        "/dev/cpu_dma_latency"
  3665      ]
  3666    }
  3667  ]
  3668  ```
  3669  
  3670  **Query parameters**:
  3671  
  3672  - **name** -  Name of the plugin to pull. The name may include a tag or digest.
  3673      This parameter is required.
  3674  
  3675  **Status codes**:
  3676  
  3677  -   **200** - no error
  3678  -   **500** - error parsing reference / not a valid repository/tag: repository
  3679        name must have at least one component
  3680  -   **500** - plugin already exists
  3681  
  3682  #### Inspect a plugin
  3683  
  3684  `GET /plugins/(plugin name)`
  3685  
  3686  Returns detailed information about an installed plugin.
  3687  
  3688  **Example request**:
  3689  
  3690  ```
  3691  GET /v1.24/plugins/tiborvass/no-remove:latest HTTP/1.1
  3692  ```
  3693  
  3694  The `:latest` tag is optional, and is used as default if omitted.
  3695  
  3696  
  3697  **Example response**:
  3698  
  3699  ```
  3700  HTTP/1.1 200 OK
  3701  Content-Type: application/json
  3702  
  3703  {
  3704    "Id": "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078",
  3705    "Name": "tiborvass/no-remove",
  3706    "Tag": "latest",
  3707    "Active": false,
  3708    "Config": {
  3709      "Mounts": [
  3710        {
  3711          "Name": "",
  3712          "Description": "",
  3713          "Settable": null,
  3714          "Source": "/data",
  3715          "Destination": "/data",
  3716          "Type": "bind",
  3717          "Options": [
  3718            "shared",
  3719            "rbind"
  3720          ]
  3721        },
  3722        {
  3723          "Name": "",
  3724          "Description": "",
  3725          "Settable": null,
  3726          "Source": null,
  3727          "Destination": "/foobar",
  3728          "Type": "tmpfs",
  3729          "Options": null
  3730        }
  3731      ],
  3732      "Env": [
  3733        "DEBUG=1"
  3734      ],
  3735      "Args": null,
  3736      "Devices": null
  3737    },
  3738    "Manifest": {
  3739      "ManifestVersion": "v0",
  3740      "Description": "A test plugin for Docker",
  3741      "Documentation": "https://docs.docker.com/engine/extend/plugins/",
  3742      "Interface": {
  3743        "Types": [
  3744          "docker.volumedriver/1.0"
  3745        ],
  3746        "Socket": "plugins.sock"
  3747      },
  3748      "Entrypoint": [
  3749        "plugin-no-remove",
  3750        "/data"
  3751      ],
  3752      "Workdir": "",
  3753      "User": {
  3754      },
  3755      "Network": {
  3756        "Type": "host"
  3757      },
  3758      "Capabilities": null,
  3759      "Mounts": [
  3760        {
  3761          "Name": "",
  3762          "Description": "",
  3763          "Settable": null,
  3764          "Source": "/data",
  3765          "Destination": "/data",
  3766          "Type": "bind",
  3767          "Options": [
  3768            "shared",
  3769            "rbind"
  3770          ]
  3771        },
  3772        {
  3773          "Name": "",
  3774          "Description": "",
  3775          "Settable": null,
  3776          "Source": null,
  3777          "Destination": "/foobar",
  3778          "Type": "tmpfs",
  3779          "Options": null
  3780        }
  3781      ],
  3782      "Devices": [
  3783        {
  3784          "Name": "device",
  3785          "Description": "a host device to mount",
  3786          "Settable": null,
  3787          "Path": "/dev/cpu_dma_latency"
  3788        }
  3789      ],
  3790      "Env": [
  3791        {
  3792          "Name": "DEBUG",
  3793          "Description": "If set, prints debug messages",
  3794          "Settable": null,
  3795          "Value": "1"
  3796        }
  3797      ],
  3798      "Args": {
  3799        "Name": "args",
  3800        "Description": "command line arguments",
  3801        "Settable": null,
  3802        "Value": [
  3803  
  3804        ]
  3805      }
  3806    }
  3807  }
  3808  ```
  3809  
  3810  **Status codes**:
  3811  
  3812  -   **200** - no error
  3813  -   **404** - plugin not installed
  3814  
  3815  #### Enable a plugin
  3816  
  3817  `POST /plugins/(plugin name)/enable`
  3818  
  3819  Enables a plugin
  3820  
  3821  **Example request**:
  3822  
  3823  ```
  3824  POST /v1.24/plugins/tiborvass/no-remove:latest/enable HTTP/1.1
  3825  ```
  3826  
  3827  The `:latest` tag is optional, and is used as default if omitted.
  3828  
  3829  
  3830  **Example response**:
  3831  
  3832  ```
  3833  HTTP/1.1 200 OK
  3834  Content-Length: 0
  3835  Content-Type: text/plain; charset=utf-8
  3836  ```
  3837  
  3838  **Status codes**:
  3839  
  3840  -   **200** - no error
  3841  -   **404** - plugin not installed
  3842  -   **500** - plugin is already enabled
  3843  
  3844  #### Disable a plugin
  3845  
  3846  `POST /plugins/(plugin name)/disable`
  3847  
  3848  Disables a plugin
  3849  
  3850  **Example request**:
  3851  
  3852  ```
  3853  POST /v1.24/plugins/tiborvass/no-remove:latest/disable HTTP/1.1
  3854  ```
  3855  
  3856  The `:latest` tag is optional, and is used as default if omitted.
  3857  
  3858  
  3859  **Example response**:
  3860  
  3861  ```
  3862  HTTP/1.1 200 OK
  3863  Content-Length: 0
  3864  Content-Type: text/plain; charset=utf-8
  3865  ```
  3866  
  3867  **Status codes**:
  3868  
  3869  -   **200** - no error
  3870  -   **404** - plugin not installed
  3871  -   **500** - plugin is already disabled
  3872  
  3873  #### Remove a plugin
  3874  
  3875  `DELETE /plugins/(plugin name)`
  3876  
  3877  Removes a plugin
  3878  
  3879  **Example request**:
  3880  
  3881  ```
  3882  DELETE /v1.24/plugins/tiborvass/no-remove:latest HTTP/1.1
  3883  ```
  3884  
  3885  The `:latest` tag is optional, and is used as default if omitted.
  3886  
  3887  **Example response**:
  3888  
  3889  ```
  3890  HTTP/1.1 200 OK
  3891  Content-Length: 0
  3892  Content-Type: text/plain; charset=utf-8
  3893  ```
  3894  
  3895  **Status codes**:
  3896  
  3897  -   **200** - no error
  3898  -   **404** - plugin not installed
  3899  -   **500** - plugin is active
  3900  
  3901  <!-- TODO Document "docker plugin push" endpoint once we have "plugin build"
  3902  
  3903  #### Push a plugin
  3904  
  3905  `POST /v1.24/plugins/tiborvass/(plugin name)/push HTTP/1.1`
  3906  
  3907  Pushes a plugin to the registry.
  3908  
  3909  **Example request**:
  3910  
  3911  ```
  3912  POST /v1.24/plugins/tiborvass/no-remove:latest HTTP/1.1
  3913  ```
  3914  
  3915  The `:latest` tag is optional, and is used as default if omitted. When using
  3916  this endpoint to push a plugin to the registry, the `X-Registry-Auth` header
  3917  can be used to include a base64-encoded AuthConfig object. Refer to the [create
  3918  an image](#create-an-image) section for more details.
  3919  
  3920  **Example response**:
  3921  
  3922  **Status codes**:
  3923  
  3924  -   **200** - no error
  3925  -   **404** - plugin not installed
  3926  
  3927  -->
  3928  
  3929  ### 3.7 Nodes
  3930  
  3931  **Note**: Node operations require the engine to be part of a swarm.
  3932  
  3933  #### List nodes
  3934  
  3935  
  3936  `GET /nodes`
  3937  
  3938  List nodes
  3939  
  3940  **Example request**:
  3941  
  3942      GET /v1.24/nodes HTTP/1.1
  3943  
  3944  **Example response**:
  3945  
  3946      HTTP/1.1 200 OK
  3947      Content-Type: application/json
  3948  
  3949      [
  3950        {
  3951          "ID": "24ifsmvkjbyhk",
  3952          "Version": {
  3953            "Index": 8
  3954          },
  3955          "CreatedAt": "2016-06-07T20:31:11.853781916Z",
  3956          "UpdatedAt": "2016-06-07T20:31:11.999868824Z",
  3957          "Spec": {
  3958            "Name": "my-node",
  3959            "Role": "manager",
  3960            "Availability": "active"
  3961            "Labels": {
  3962                "foo": "bar"
  3963            }
  3964          },
  3965          "Description": {
  3966            "Hostname": "bf3067039e47",
  3967            "Platform": {
  3968              "Architecture": "x86_64",
  3969              "OS": "linux"
  3970            },
  3971            "Resources": {
  3972              "NanoCPUs": 4000000000,
  3973              "MemoryBytes": 8272408576
  3974            },
  3975            "Engine": {
  3976              "EngineVersion": "1.12.0",
  3977              "Labels": {
  3978                  "foo": "bar",
  3979              }
  3980              "Plugins": [
  3981                {
  3982                  "Type": "Volume",
  3983                  "Name": "local"
  3984                },
  3985                {
  3986                  "Type": "Network",
  3987                  "Name": "bridge"
  3988                }
  3989                {
  3990                  "Type": "Network",
  3991                  "Name": "null"
  3992                }
  3993                {
  3994                  "Type": "Network",
  3995                  "Name": "overlay"
  3996                }
  3997              ]
  3998            }
  3999          },
  4000          "Status": {
  4001            "State": "ready"
  4002          },
  4003          "ManagerStatus": {
  4004            "Leader": true,
  4005            "Reachability": "reachable",
  4006            "Addr": "172.17.0.2:2377""
  4007          }
  4008        }
  4009      ]
  4010  
  4011  **Query parameters**:
  4012  
  4013  - **filters** – a JSON encoded value of the filters (a `map[string][]string`) to process on the
  4014    nodes list. Available filters:
  4015    - `id=<node id>`
  4016    - `label=<engine label>`
  4017    - `membership=`(`accepted`|`pending`)`
  4018    - `name=<node name>`
  4019    - `role=`(`manager`|`worker`)`
  4020  
  4021  **Status codes**:
  4022  
  4023  -   **200** – no error
  4024  -   **406** - node is not part of a swarm
  4025  -   **500** – server error
  4026  
  4027  #### Inspect a node
  4028  
  4029  
  4030  `GET /nodes/(id or name)`
  4031  
  4032  Return low-level information on the node `id`
  4033  
  4034  **Example request**:
  4035  
  4036        GET /v1.24/nodes/24ifsmvkjbyhk HTTP/1.1
  4037  
  4038  **Example response**:
  4039  
  4040      HTTP/1.1 200 OK
  4041      Content-Type: application/json
  4042  
  4043      {
  4044        "ID": "24ifsmvkjbyhk",
  4045        "Version": {
  4046          "Index": 8
  4047        },
  4048        "CreatedAt": "2016-06-07T20:31:11.853781916Z",
  4049        "UpdatedAt": "2016-06-07T20:31:11.999868824Z",
  4050        "Spec": {
  4051          "Name": "my-node",
  4052          "Role": "manager",
  4053          "Availability": "active"
  4054          "Labels": {
  4055              "foo": "bar"
  4056          }
  4057        },
  4058        "Description": {
  4059          "Hostname": "bf3067039e47",
  4060          "Platform": {
  4061            "Architecture": "x86_64",
  4062            "OS": "linux"
  4063          },
  4064          "Resources": {
  4065            "NanoCPUs": 4000000000,
  4066            "MemoryBytes": 8272408576
  4067          },
  4068          "Engine": {
  4069            "EngineVersion": "1.12.0",
  4070            "Labels": {
  4071                "foo": "bar",
  4072            }
  4073            "Plugins": [
  4074              {
  4075                "Type": "Volume",
  4076                "Name": "local"
  4077              },
  4078              {
  4079                "Type": "Network",
  4080                "Name": "bridge"
  4081              }
  4082              {
  4083                "Type": "Network",
  4084                "Name": "null"
  4085              }
  4086              {
  4087                "Type": "Network",
  4088                "Name": "overlay"
  4089              }
  4090            ]
  4091          }
  4092        },
  4093        "Status": {
  4094          "State": "ready"
  4095        },
  4096        "ManagerStatus": {
  4097          "Leader": true,
  4098          "Reachability": "reachable",
  4099          "Addr": "172.17.0.2:2377""
  4100        }
  4101      }
  4102  
  4103  **Status codes**:
  4104  
  4105  -   **200** – no error
  4106  -   **404** – no such node
  4107  -   **406** – node is not part of a swarm
  4108  -   **500** – server error
  4109  
  4110  #### Remove a node
  4111  
  4112  
  4113  `DELETE /nodes/(id or name)`
  4114  
  4115  Remove a node from the swarm.
  4116  
  4117  **Example request**:
  4118  
  4119      DELETE /v1.24/nodes/24ifsmvkjbyhk HTTP/1.1
  4120  
  4121  **Example response**:
  4122  
  4123      HTTP/1.1 200 OK
  4124      Content-Length: 0
  4125      Content-Type: text/plain; charset=utf-8
  4126  
  4127  **Query parameters**:
  4128  
  4129  -   **force** - 1/True/true or 0/False/false, Force remove a node from the swarm.
  4130          Default `false`.
  4131  
  4132  **Status codes**:
  4133  
  4134  -   **200** – no error
  4135  -   **404** – no such node
  4136  -   **406** – node is not part of a swarm
  4137  -   **500** – server error
  4138  
  4139  #### Update a node
  4140  
  4141  
  4142  `POST /nodes/(id)/update`
  4143  
  4144  Update a node.
  4145  
  4146  The payload of the `POST` request is the new `NodeSpec` and
  4147  overrides the current `NodeSpec` for the specified node.
  4148  
  4149  If `Availability` or `Role` are omitted, this returns an
  4150  error. Any other field omitted resets the current value to either
  4151  an empty value or the default cluster-wide value.
  4152  
  4153  **Example Request**
  4154  
  4155      POST /v1.24/nodes/24ifsmvkjbyhk/update?version=8 HTTP/1.1
  4156      Content-Type: application/json
  4157      Content-Length: 12345
  4158  
  4159      {
  4160        "Availability": "active",
  4161        "Name": "node-name",
  4162        "Role": "manager",
  4163        "Labels": {
  4164          "foo": "bar"
  4165        }
  4166      }
  4167  
  4168  **Example response**:
  4169  
  4170      HTTP/1.1 200 OK
  4171      Content-Length: 0
  4172      Content-Type: text/plain; charset=utf-8
  4173  
  4174  **Query parameters**:
  4175  
  4176  - **version** – The version number of the node object being updated. This is
  4177    required to avoid conflicting writes.
  4178  
  4179  JSON Parameters:
  4180  
  4181  - **Annotations** – Optional medata to associate with the node.
  4182      - **Name** – User-defined name for the node.
  4183      - **Labels** – A map of labels to associate with the node (e.g.,
  4184        `{"key":"value", "key2":"value2"}`).
  4185  - **Role** - Role of the node (worker|manager).
  4186  - **Availability** - Availability of the node (active|pause|drain).
  4187  
  4188  
  4189  **Status codes**:
  4190  
  4191  -   **200** – no error
  4192  -   **404** – no such node
  4193  -   **406** – node is not part of a swarm
  4194  -   **500** – server error
  4195  
  4196  ### 3.8 Swarm
  4197  
  4198  #### Inspect swarm
  4199  
  4200  
  4201  `GET /swarm`
  4202  
  4203  Inspect swarm
  4204  
  4205  **Example response**:
  4206  
  4207      HTTP/1.1 200 OK
  4208      Content-Type: application/json
  4209  
  4210      {
  4211        "CreatedAt" : "2016-08-15T16:00:20.349727406Z",
  4212        "Spec" : {
  4213          "Dispatcher" : {
  4214            "HeartbeatPeriod" : 5000000000
  4215          },
  4216          "Orchestration" : {
  4217           "TaskHistoryRetentionLimit" : 10
  4218          },
  4219          "CAConfig" : {
  4220            "NodeCertExpiry" : 7776000000000000
  4221          },
  4222          "Raft" : {
  4223            "LogEntriesForSlowFollowers" : 500,
  4224            "HeartbeatTick" : 1,
  4225            "SnapshotInterval" : 10000,
  4226            "ElectionTick" : 3
  4227          },
  4228          "TaskDefaults" : {},
  4229          "Name" : "default"
  4230        },
  4231       "JoinTokens" : {
  4232          "Worker" : "SWMTKN-1-1h8aps2yszaiqmz2l3oc5392pgk8e49qhx2aj3nyv0ui0hez2a-6qmn92w6bu3jdvnglku58u11a",
  4233          "Manager" : "SWMTKN-1-1h8aps2yszaiqmz2l3oc5392pgk8e49qhx2aj3nyv0ui0hez2a-8llk83c4wm9lwioey2s316r9l"
  4234       },
  4235       "ID" : "70ilmkj2f6sp2137c753w2nmt",
  4236       "UpdatedAt" : "2016-08-15T16:32:09.623207604Z",
  4237       "Version" : {
  4238         "Index" : 51
  4239      }
  4240    }
  4241  
  4242  **Status codes**:
  4243  
  4244  -   **200** - no error
  4245  -   **406** – node is not part of a swarm
  4246  -   **500** - sever error
  4247  
  4248  #### Initialize a new swarm
  4249  
  4250  
  4251  `POST /swarm/init`
  4252  
  4253  Initialize a new swarm. The body of the HTTP response includes the node ID.
  4254  
  4255  **Example request**:
  4256  
  4257      POST /v1.24/swarm/init HTTP/1.1
  4258      Content-Type: application/json
  4259      Content-Length: 12345
  4260  
  4261      {
  4262        "ListenAddr": "0.0.0.0:2377",
  4263        "AdvertiseAddr": "192.168.1.1:2377",
  4264        "ForceNewCluster": false,
  4265        "Spec": {
  4266          "Orchestration": {},
  4267          "Raft": {},
  4268          "Dispatcher": {},
  4269          "CAConfig": {}
  4270        }
  4271      }
  4272  
  4273  **Example response**:
  4274  
  4275      HTTP/1.1 200 OK
  4276      Content-Length: 28
  4277      Content-Type: application/json
  4278      Date: Thu, 01 Sep 2016 21:49:13 GMT
  4279      Server: Docker/1.12.0 (linux)
  4280  
  4281      "7v2t30z9blmxuhnyo6s4cpenp"
  4282  
  4283  **Status codes**:
  4284  
  4285  -   **200** – no error
  4286  -   **400** – bad parameter
  4287  -   **406** – node is already part of a swarm
  4288  -   **500** - server error
  4289  
  4290  JSON Parameters:
  4291  
  4292  - **ListenAddr** – Listen address used for inter-manager communication, as well as determining
  4293    the networking interface used for the VXLAN Tunnel Endpoint (VTEP). This can either be an
  4294    address/port combination in the form `192.168.1.1:4567`, or an interface followed by a port
  4295    number, like `eth0:4567`. If the port number is omitted, the default swarm listening port is
  4296    used.
  4297  - **AdvertiseAddr** – Externally reachable address advertised to other nodes. This can either be
  4298    an address/port combination in the form `192.168.1.1:4567`, or an interface followed by a port
  4299    number, like `eth0:4567`. If the port number is omitted, the port number from the listen
  4300    address is used. If `AdvertiseAddr` is not specified, it will be automatically detected when
  4301    possible.
  4302  - **ForceNewCluster** – Force creation of a new swarm.
  4303  - **Spec** – Configuration settings for the new swarm.
  4304      - **Orchestration** – Configuration settings for the orchestration aspects of the swarm.
  4305          - **TaskHistoryRetentionLimit** – Maximum number of tasks history stored.
  4306      - **Raft** – Raft related configuration.
  4307          - **SnapshotInterval** – Number of logs entries between snapshot.
  4308          - **KeepOldSnapshots** – Number of snapshots to keep beyond the current snapshot.
  4309          - **LogEntriesForSlowFollowers** – Number of log entries to keep around to sync up slow
  4310            followers after a snapshot is created.
  4311          - **HeartbeatTick** – Amount of ticks (in seconds) between each heartbeat.
  4312          - **ElectionTick** – Amount of ticks (in seconds) needed without a leader to trigger a new
  4313            election.
  4314      - **Dispatcher** – Configuration settings for the task dispatcher.
  4315          - **HeartbeatPeriod** – The delay for an agent to send a heartbeat to the dispatcher.
  4316      - **CAConfig** – Certificate authority configuration.
  4317          - **NodeCertExpiry** – Automatic expiry for nodes certificates.
  4318          - **ExternalCA** - Configuration for forwarding signing requests to an external
  4319            certificate authority.
  4320              - **Protocol** - Protocol for communication with the external CA
  4321                (currently only "cfssl" is supported).
  4322              - **URL** - URL where certificate signing requests should be sent.
  4323              - **Options** - An object with key/value pairs that are interpreted
  4324                as protocol-specific options for the external CA driver.
  4325  
  4326  #### Join an existing swarm
  4327  
  4328  `POST /swarm/join`
  4329  
  4330  Join an existing swarm
  4331  
  4332  **Example request**:
  4333  
  4334      POST /v1.24/swarm/join HTTP/1.1
  4335      Content-Type: application/json
  4336  
  4337      {
  4338        "ListenAddr": "0.0.0.0:2377",
  4339        "AdvertiseAddr": "192.168.1.1:2377",
  4340        "RemoteAddrs": ["node1:2377"],
  4341        "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2"
  4342      }
  4343  
  4344  **Example response**:
  4345  
  4346      HTTP/1.1 200 OK
  4347      Content-Length: 0
  4348      Content-Type: text/plain; charset=utf-8
  4349  
  4350  **Status codes**:
  4351  
  4352  -   **200** – no error
  4353  -   **400** – bad parameter
  4354  -   **406** – node is already part of a swarm
  4355  -   **500** - server error
  4356  
  4357  JSON Parameters:
  4358  
  4359  - **ListenAddr** – Listen address used for inter-manager communication if the node gets promoted to
  4360    manager, as well as determining the networking interface used for the VXLAN Tunnel Endpoint (VTEP).
  4361  - **AdvertiseAddr** – Externally reachable address advertised to other nodes. This can either be
  4362    an address/port combination in the form `192.168.1.1:4567`, or an interface followed by a port
  4363    number, like `eth0:4567`. If the port number is omitted, the port number from the listen
  4364    address is used. If `AdvertiseAddr` is not specified, it will be automatically detected when
  4365    possible.
  4366  - **RemoteAddr** – Address of any manager node already participating in the swarm.
  4367  - **JoinToken** – Secret token for joining this swarm.
  4368  
  4369  #### Leave a swarm
  4370  
  4371  
  4372  `POST /swarm/leave`
  4373  
  4374  Leave a swarm
  4375  
  4376  **Example request**:
  4377  
  4378      POST /v1.24/swarm/leave HTTP/1.1
  4379  
  4380  **Example response**:
  4381  
  4382      HTTP/1.1 200 OK
  4383      Content-Length: 0
  4384      Content-Type: text/plain; charset=utf-8
  4385  
  4386  **Query parameters**:
  4387  
  4388  - **force** - Boolean (0/1, false/true). Force leave swarm, even if this is the last manager or that it will break the cluster.
  4389  
  4390  **Status codes**:
  4391  
  4392  -  **200** – no error
  4393  -  **406** – node is not part of a swarm
  4394  -  **500** - server error
  4395  
  4396  #### Update a swarm
  4397  
  4398  
  4399  `POST /swarm/update`
  4400  
  4401  Update a swarm
  4402  
  4403  **Example request**:
  4404  
  4405      POST /v1.24/swarm/update HTTP/1.1
  4406      Content-Length: 12345
  4407  
  4408      {
  4409        "Name": "default",
  4410        "Orchestration": {
  4411          "TaskHistoryRetentionLimit": 10
  4412        },
  4413        "Raft": {
  4414          "SnapshotInterval": 10000,
  4415          "LogEntriesForSlowFollowers": 500,
  4416          "HeartbeatTick": 1,
  4417          "ElectionTick": 3
  4418        },
  4419        "Dispatcher": {
  4420          "HeartbeatPeriod": 5000000000
  4421        },
  4422        "CAConfig": {
  4423          "NodeCertExpiry": 7776000000000000
  4424        },
  4425        "JoinTokens": {
  4426          "Worker": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx",
  4427          "Manager": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2"
  4428        }
  4429      }
  4430  
  4431  
  4432  **Example response**:
  4433  
  4434      HTTP/1.1 200 OK
  4435      Content-Length: 0
  4436      Content-Type: text/plain; charset=utf-8
  4437  
  4438  **Query parameters**:
  4439  
  4440  - **version** – The version number of the swarm object being updated. This is
  4441    required to avoid conflicting writes.
  4442  - **rotateWorkerToken** - Set to `true` (or `1`) to rotate the worker join token.
  4443  - **rotateManagerToken** - Set to `true` (or `1`) to rotate the manager join token.
  4444  
  4445  **Status codes**:
  4446  
  4447  -   **200** – no error
  4448  -   **400** – bad parameter
  4449  -   **406** – node is not part of a swarm
  4450  -   **500** - server error
  4451  
  4452  JSON Parameters:
  4453  
  4454  - **Orchestration** – Configuration settings for the orchestration aspects of the swarm.
  4455      - **TaskHistoryRetentionLimit** – Maximum number of tasks history stored.
  4456  - **Raft** – Raft related configuration.
  4457      - **SnapshotInterval** – Number of logs entries between snapshot.
  4458      - **KeepOldSnapshots** – Number of snapshots to keep beyond the current snapshot.
  4459      - **LogEntriesForSlowFollowers** – Number of log entries to keep around to sync up slow
  4460        followers after a snapshot is created.
  4461      - **HeartbeatTick** – Amount of ticks (in seconds) between each heartbeat.
  4462      - **ElectionTick** – Amount of ticks (in seconds) needed without a leader to trigger a new
  4463        election.
  4464  - **Dispatcher** – Configuration settings for the task dispatcher.
  4465      - **HeartbeatPeriod** – The delay for an agent to send a heartbeat to the dispatcher.
  4466  - **CAConfig** – CA configuration.
  4467      - **NodeCertExpiry** – Automatic expiry for nodes certificates.
  4468      - **ExternalCA** - Configuration for forwarding signing requests to an external
  4469        certificate authority.
  4470          - **Protocol** - Protocol for communication with the external CA
  4471            (currently only "cfssl" is supported).
  4472          - **URL** - URL where certificate signing requests should be sent.
  4473          - **Options** - An object with key/value pairs that are interpreted
  4474            as protocol-specific options for the external CA driver.
  4475  - **JoinTokens** - Tokens that can be used by other nodes to join the swarm.
  4476      - **Worker** - Token to use for joining as a worker.
  4477      - **Manager** - Token to use for joining as a manager.
  4478  
  4479  ### 3.9 Services
  4480  
  4481  **Note**: Service operations require to first be part of a swarm.
  4482  
  4483  #### List services
  4484  
  4485  
  4486  `GET /services`
  4487  
  4488  List services
  4489  
  4490  **Example request**:
  4491  
  4492      GET /v1.24/services HTTP/1.1
  4493  
  4494  **Example response**:
  4495  
  4496      HTTP/1.1 200 OK
  4497      Content-Type: application/json
  4498  
  4499      [
  4500        {
  4501          "ID": "9mnpnzenvg8p8tdbtq4wvbkcz",
  4502          "Version": {
  4503            "Index": 19
  4504          },
  4505          "CreatedAt": "2016-06-07T21:05:51.880065305Z",
  4506          "UpdatedAt": "2016-06-07T21:07:29.962229872Z",
  4507          "Spec": {
  4508            "Name": "hopeful_cori",
  4509            "TaskTemplate": {
  4510              "ContainerSpec": {
  4511                "Image": "redis"
  4512              },
  4513              "Resources": {
  4514                "Limits": {},
  4515                "Reservations": {}
  4516              },
  4517              "RestartPolicy": {
  4518                "Condition": "any",
  4519                "MaxAttempts": 0
  4520              },
  4521              "Placement": {
  4522                "Constraints": [
  4523                  "node.role == worker"
  4524                ]
  4525              }
  4526            },
  4527            "Mode": {
  4528              "Replicated": {
  4529                "Replicas": 1
  4530              }
  4531            },
  4532            "UpdateConfig": {
  4533              "Parallelism": 1,
  4534              "FailureAction": "pause"
  4535            },
  4536            "EndpointSpec": {
  4537              "Mode": "vip",
  4538              "Ports": [
  4539                {
  4540                  "Protocol": "tcp",
  4541                  "TargetPort": 6379,
  4542                  "PublishedPort": 30001
  4543                }
  4544              ]
  4545            }
  4546          },
  4547          "Endpoint": {
  4548            "Spec": {
  4549              "Mode": "vip",
  4550              "Ports": [
  4551                {
  4552                  "Protocol": "tcp",
  4553                  "TargetPort": 6379,
  4554                  "PublishedPort": 30001
  4555                }
  4556              ]
  4557            },
  4558            "Ports": [
  4559              {
  4560                "Protocol": "tcp",
  4561                "TargetPort": 6379,
  4562                "PublishedPort": 30001
  4563              }
  4564            ],
  4565            "VirtualIPs": [
  4566              {
  4567                "NetworkID": "4qvuz4ko70xaltuqbt8956gd1",
  4568                "Addr": "10.255.0.2/16"
  4569              },
  4570              {
  4571                "NetworkID": "4qvuz4ko70xaltuqbt8956gd1",
  4572                "Addr": "10.255.0.3/16"
  4573              }
  4574            ]
  4575          }
  4576        }
  4577      ]
  4578  
  4579  **Query parameters**:
  4580  
  4581  - **filters** – a JSON encoded value of the filters (a `map[string][]string`) to process on the
  4582    services list. Available filters:
  4583    - `id=<service id>`
  4584    - `label=<service label>`
  4585    - `name=<service name>`
  4586  
  4587  **Status codes**:
  4588  
  4589  -   **200** – no error
  4590  -   **406** – node is not part of a swarm
  4591  -   **500** – server error
  4592  
  4593  #### Create a service
  4594  
  4595  `POST /services/create`
  4596  
  4597  Create a service. When using this endpoint to create a service using a private
  4598  repository from the registry, the `X-Registry-Auth` header must be used to
  4599  include a base64-encoded AuthConfig object. Refer to the [create an
  4600  image](#create-an-image) section for more details.
  4601  
  4602  **Example request**:
  4603  
  4604      POST /v1.24/services/create HTTP/1.1
  4605      Content-Type: application/json
  4606      Content-Length: 12345
  4607  
  4608      {
  4609        "Name": "web",
  4610        "TaskTemplate": {
  4611          "ContainerSpec": {
  4612            "Image": "nginx:alpine",
  4613            "Mounts": [
  4614              {
  4615                "ReadOnly": true,
  4616                "Source": "web-data",
  4617                "Target": "/usr/share/nginx/html",
  4618                "Type": "volume",
  4619                "VolumeOptions": {
  4620                  "DriverConfig": {
  4621                  },
  4622                  "Labels": {
  4623                    "com.example.something": "something-value"
  4624                  }
  4625                }
  4626              }
  4627            ],
  4628            "User": "33"
  4629          },
  4630          "Networks": [
  4631              {
  4632                "Target": "overlay1"
  4633              }
  4634          ],
  4635          "LogDriver": {
  4636            "Name": "json-file",
  4637            "Options": {
  4638              "max-file": "3",
  4639              "max-size": "10M"
  4640            }
  4641          },
  4642          "Placement": {
  4643            "Constraints": [
  4644              "node.role == worker"
  4645            ]
  4646          },
  4647          "Resources": {
  4648            "Limits": {
  4649              "MemoryBytes": 104857600
  4650            },
  4651            "Reservations": {
  4652            }
  4653          },
  4654          "RestartPolicy": {
  4655            "Condition": "on-failure",
  4656            "Delay": 10000000000,
  4657            "MaxAttempts": 10
  4658          }
  4659        },
  4660        "Mode": {
  4661          "Replicated": {
  4662            "Replicas": 4
  4663          }
  4664        },
  4665        "UpdateConfig": {
  4666          "Delay": 30000000000,
  4667          "Parallelism": 2,
  4668          "FailureAction": "pause"
  4669        },
  4670        "EndpointSpec": {
  4671          "Ports": [
  4672            {
  4673              "Protocol": "tcp",
  4674              "PublishedPort": 8080,
  4675              "TargetPort": 80
  4676            }
  4677          ]
  4678        },
  4679        "Labels": {
  4680          "foo": "bar"
  4681        }
  4682      }
  4683  
  4684  **Example response**:
  4685  
  4686      HTTP/1.1 201 Created
  4687      Content-Type: application/json
  4688  
  4689      {
  4690        "ID":"ak7w3gjqoa3kuz8xcpnyy0pvl"
  4691      }
  4692  
  4693  **Status codes**:
  4694  
  4695  -   **201** – no error
  4696  -   **403** - network is not eligible for services
  4697  -   **406** – node is not part of a swarm
  4698  -   **409** – name conflicts with an existing object
  4699  -   **500** - server error
  4700  
  4701  **JSON Parameters**:
  4702  
  4703  - **Name** – User-defined name for the service.
  4704  - **Labels** – A map of labels to associate with the service (e.g., `{"key":"value", "key2":"value2"}`).
  4705  - **TaskTemplate** – Specification of the tasks to start as part of the new service.
  4706      - **ContainerSpec** - Container settings for containers started as part of this task.
  4707          - **Image** – A string specifying the image name to use for the container.
  4708          - **Command** – The command to be run in the image.
  4709          - **Args** – Arguments to the command.
  4710          - **Env** – A list of environment variables in the form of `["VAR=value"[,"VAR2=value2"]]`.
  4711          - **Dir** – A string specifying the working directory for commands to run in.
  4712          - **User** – A string value specifying the user inside the container.
  4713          - **Labels** – A map of labels to associate with the service (e.g.,
  4714            `{"key":"value", "key2":"value2"}`).
  4715          - **Mounts** – Specification for mounts to be added to containers
  4716            created as part of the service.
  4717              - **Target** – Container path.
  4718              - **Source** – Mount source (e.g. a volume name, a host path).
  4719              - **Type** – The mount type (`bind`, or `volume`).
  4720              - **ReadOnly** – A boolean indicating whether the mount should be read-only.
  4721              - **BindOptions** - Optional configuration for the `bind` type.
  4722                - **Propagation** – A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`.
  4723              - **VolumeOptions** – Optional configuration for the `volume` type.
  4724                  - **NoCopy** – A boolean indicating if volume should be
  4725                    populated with the data from the target. (Default false)
  4726                  - **Labels** – User-defined name and labels for the volume.
  4727                  - **DriverConfig** – Map of driver-specific options.
  4728                    - **Name** - Name of the driver to use to create the volume.
  4729                    - **Options** - key/value map of driver specific options.
  4730          - **StopGracePeriod** – Amount of time to wait for the container to terminate before
  4731            forcefully killing it.
  4732      - **LogDriver** - Log configuration for containers created as part of the
  4733        service.
  4734          - **Name** - Name of the logging driver to use (`json-file`, `syslog`,
  4735            `journald`, `gelf`, `fluentd`, `awslogs`, `splunk`, `etwlogs`, `none`).
  4736          - **Options** - Driver-specific options.
  4737      - **Resources** – Resource requirements which apply to each individual container created as part
  4738        of the service.
  4739          - **Limits** – Define resources limits.
  4740              - **NanoCPUs** – CPU limit in units of 10<sup>-9</sup> CPU shares.
  4741              - **MemoryBytes** – Memory limit in Bytes.
  4742          - **Reservation** – Define resources reservation.
  4743              - **NanoCPUs** – CPU reservation in units of 10<sup>-9</sup> CPU shares.
  4744              - **MemoryBytes** – Memory reservation in Bytes.
  4745      - **RestartPolicy** – Specification for the restart policy which applies to containers created
  4746        as part of this service.
  4747          - **Condition** – Condition for restart (`none`, `on-failure`, or `any`).
  4748          - **Delay** – Delay between restart attempts.
  4749          - **MaxAttempts** – Maximum attempts to restart a given container before giving up (default value
  4750            is 0, which is ignored).
  4751          - **Window** – Windows is the time window used to evaluate the restart policy (default value is
  4752            0, which is unbounded).
  4753      - **Placement** – Restrictions on where a service can run.
  4754          - **Constraints** – An array of constraints, e.g. `[ "node.role == manager" ]`.
  4755  - **Mode** – Scheduling mode for the service (`replicated` or `global`, defaults to `replicated`).
  4756  - **UpdateConfig** – Specification for the update strategy of the service.
  4757      - **Parallelism** – Maximum number of tasks to be updated in one iteration (0 means unlimited
  4758        parallelism).
  4759      - **Delay** – Amount of time between updates.
  4760      - **FailureAction** - Action to take if an updated task fails to run, or stops running during the
  4761        update. Values are `continue` and `pause`.
  4762  - **Networks** – Array of network names or IDs to attach the service to.
  4763  - **EndpointSpec** – Properties that can be configured to access and load balance a service.
  4764      - **Mode** – The mode of resolution to use for internal load balancing
  4765        between tasks (`vip` or `dnsrr`). Defaults to `vip` if not provided.
  4766      - **Ports** – List of exposed ports that this service is accessible on from
  4767        the outside, in the form of:
  4768        `{"Protocol": <"tcp"|"udp">, "PublishedPort": <port>, "TargetPort": <port>}`.
  4769        Ports can only be provided if `vip` resolution mode is used.
  4770  
  4771  **Request Headers**:
  4772  
  4773  - **Content-type** – Set to `"application/json"`.
  4774  - **X-Registry-Auth** – base64-encoded AuthConfig object, containing either
  4775    login information, or a token. Refer to the [create an image](#create-an-image)
  4776    section for more details.
  4777  
  4778  
  4779  #### Remove a service
  4780  
  4781  
  4782  `DELETE /services/(id or name)`
  4783  
  4784  Stop and remove the service `id`
  4785  
  4786  **Example request**:
  4787  
  4788      DELETE /v1.24/services/16253994b7c4 HTTP/1.1
  4789  
  4790  **Example response**:
  4791  
  4792      HTTP/1.1 200 OK
  4793      Content-Length: 0
  4794      Content-Type: text/plain; charset=utf-8
  4795  
  4796  **Status codes**:
  4797  
  4798  -   **200** – no error
  4799  -   **404** – no such service
  4800  -   **406** - node is not part of a swarm
  4801  -   **500** – server error
  4802  
  4803  #### Inspect one or more services
  4804  
  4805  
  4806  `GET /services/(id or name)`
  4807  
  4808  Return information on the service `id`.
  4809  
  4810  **Example request**:
  4811  
  4812      GET /v1.24/services/1cb4dnqcyx6m66g2t538x3rxha HTTP/1.1
  4813  
  4814  **Example response**:
  4815  
  4816      {
  4817        "ID": "ak7w3gjqoa3kuz8xcpnyy0pvl",
  4818        "Version": {
  4819          "Index": 95
  4820        },
  4821        "CreatedAt": "2016-06-07T21:10:20.269723157Z",
  4822        "UpdatedAt": "2016-06-07T21:10:20.276301259Z",
  4823        "Spec": {
  4824          "Name": "redis",
  4825          "TaskTemplate": {
  4826            "ContainerSpec": {
  4827              "Image": "redis"
  4828            },
  4829            "Resources": {
  4830              "Limits": {},
  4831              "Reservations": {}
  4832            },
  4833            "RestartPolicy": {
  4834              "Condition": "any",
  4835              "MaxAttempts": 0
  4836            },
  4837            "Placement": {}
  4838          },
  4839          "Mode": {
  4840            "Replicated": {
  4841              "Replicas": 1
  4842            }
  4843          },
  4844          "UpdateConfig": {
  4845            "Parallelism": 1,
  4846            "FailureAction": "pause"
  4847          },
  4848          "EndpointSpec": {
  4849            "Mode": "vip",
  4850            "Ports": [
  4851              {
  4852                "Protocol": "tcp",
  4853                "TargetPort": 6379,
  4854                "PublishedPort": 30001
  4855              }
  4856            ]
  4857          }
  4858        },
  4859        "Endpoint": {
  4860          "Spec": {
  4861            "Mode": "vip",
  4862            "Ports": [
  4863              {
  4864                "Protocol": "tcp",
  4865                "TargetPort": 6379,
  4866                "PublishedPort": 30001
  4867              }
  4868            ]
  4869          },
  4870          "Ports": [
  4871            {
  4872              "Protocol": "tcp",
  4873              "TargetPort": 6379,
  4874              "PublishedPort": 30001
  4875            }
  4876          ],
  4877          "VirtualIPs": [
  4878            {
  4879              "NetworkID": "4qvuz4ko70xaltuqbt8956gd1",
  4880              "Addr": "10.255.0.4/16"
  4881            }
  4882          ]
  4883        }
  4884      }
  4885  
  4886  **Status codes**:
  4887  
  4888  -   **200** – no error
  4889  -   **404** – no such service
  4890  -   **406** - node is not part of a swarm
  4891  -   **500** – server error
  4892  
  4893  #### Update a service
  4894  
  4895  `POST /services/(id)/update`
  4896  
  4897  Update a service. When using this endpoint to create a service using a
  4898  private repository from the registry, the `X-Registry-Auth` header can be used
  4899  to update the authentication information for that is stored for the service.
  4900  The header contains a base64-encoded AuthConfig object. Refer to the [create an
  4901  image](#create-an-image) section for more details.
  4902  
  4903  **Example request**:
  4904  
  4905      POST /v1.24/services/1cb4dnqcyx6m66g2t538x3rxha/update?version=23 HTTP/1.1
  4906      Content-Type: application/json
  4907      Content-Length: 12345
  4908  
  4909      {
  4910        "Name": "top",
  4911        "TaskTemplate": {
  4912          "ContainerSpec": {
  4913            "Image": "busybox",
  4914            "Args": [
  4915              "top"
  4916            ]
  4917          },
  4918          "Resources": {
  4919            "Limits": {},
  4920            "Reservations": {}
  4921          },
  4922          "RestartPolicy": {
  4923            "Condition": "any",
  4924            "MaxAttempts": 0
  4925          },
  4926          "Placement": {}
  4927        },
  4928        "Mode": {
  4929          "Replicated": {
  4930            "Replicas": 1
  4931          }
  4932        },
  4933        "UpdateConfig": {
  4934          "Parallelism": 1
  4935        },
  4936        "EndpointSpec": {
  4937          "Mode": "vip"
  4938        }
  4939      }
  4940  
  4941  **Example response**:
  4942  
  4943      HTTP/1.1 200 OK
  4944      Content-Length: 0
  4945      Content-Type: text/plain; charset=utf-8
  4946  
  4947  **JSON Parameters**:
  4948  
  4949  - **Name** – User-defined name for the service. Note that renaming services is not supported.
  4950  - **Labels** – A map of labels to associate with the service (e.g., `{"key":"value", "key2":"value2"}`).
  4951  - **TaskTemplate** – Specification of the tasks to start as part of the new service.
  4952      - **ContainerSpec** - Container settings for containers started as part of this task.
  4953          - **Image** – A string specifying the image name to use for the container.
  4954          - **Command** – The command to be run in the image.
  4955          - **Args** – Arguments to the command.
  4956          - **Env** – A list of environment variables in the form of `["VAR=value"[,"VAR2=value2"]]`.
  4957          - **Dir** – A string specifying the working directory for commands to run in.
  4958          - **User** – A string value specifying the user inside the container.
  4959          - **Labels** – A map of labels to associate with the service (e.g.,
  4960            `{"key":"value", "key2":"value2"}`).
  4961          - **Mounts** – Specification for mounts to be added to containers created as part of the new
  4962            service.
  4963              - **Target** – Container path.
  4964              - **Source** – Mount source (e.g. a volume name, a host path).
  4965              - **Type** – The mount type (`bind`, or `volume`).
  4966              - **ReadOnly** – A boolean indicating whether the mount should be read-only.
  4967              - **BindOptions** - Optional configuration for the `bind` type
  4968                - **Propagation** – A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`.
  4969              - **VolumeOptions** – Optional configuration for the `volume` type.
  4970                  - **NoCopy** – A boolean indicating if volume should be
  4971                    populated with the data from the target. (Default false)
  4972                  - **Labels** – User-defined name and labels for the volume.
  4973                  - **DriverConfig** – Map of driver-specific options.
  4974                    - **Name** - Name of the driver to use to create the volume
  4975                    - **Options** - key/value map of driver specific options
  4976          - **StopGracePeriod** – Amount of time to wait for the container to terminate before
  4977            forcefully killing it.
  4978      - **Resources** – Resource requirements which apply to each individual container created as part
  4979        of the service.
  4980          - **Limits** – Define resources limits.
  4981              - **CPU** – CPU limit
  4982              - **Memory** – Memory limit
  4983          - **Reservation** – Define resources reservation.
  4984              - **CPU** – CPU reservation
  4985              - **Memory** – Memory reservation
  4986      - **RestartPolicy** – Specification for the restart policy which applies to containers created
  4987        as part of this service.
  4988          - **Condition** – Condition for restart (`none`, `on-failure`, or `any`).
  4989          - **Delay** – Delay between restart attempts.
  4990          - **MaxAttempts** – Maximum attempts to restart a given container before giving up (default value
  4991            is 0, which is ignored).
  4992          - **Window** – Windows is the time window used to evaluate the restart policy (default value is
  4993            0, which is unbounded).
  4994      - **Placement** – Restrictions on where a service can run.
  4995          - **Constraints** – An array of constraints, e.g. `[ "node.role == manager" ]`.
  4996  - **Mode** – Scheduling mode for the service (`replicated` or `global`, defaults to `replicated`).
  4997  - **UpdateConfig** – Specification for the update strategy of the service.
  4998      - **Parallelism** – Maximum number of tasks to be updated in one iteration (0 means unlimited
  4999        parallelism).
  5000      - **Delay** – Amount of time between updates.
  5001  - **Networks** – Array of network names or IDs to attach the service to.
  5002  - **EndpointSpec** – Properties that can be configured to access and load balance a service.
  5003      - **Mode** – The mode of resolution to use for internal load balancing
  5004        between tasks (`vip` or `dnsrr`). Defaults to `vip` if not provided.
  5005      - **Ports** – List of exposed ports that this service is accessible on from
  5006        the outside, in the form of:
  5007        `{"Protocol": <"tcp"|"udp">, "PublishedPort": <port>, "TargetPort": <port>}`.
  5008        Ports can only be provided if `vip` resolution mode is used.
  5009  
  5010  **Query parameters**:
  5011  
  5012  - **version** – The version number of the service object being updated. This is
  5013    required to avoid conflicting writes.
  5014  
  5015  **Request Headers**:
  5016  
  5017  - **Content-type** – Set to `"application/json"`.
  5018  - **X-Registry-Auth** – base64-encoded AuthConfig object, containing either
  5019    login information, or a token. Refer to the [create an image](#create-an-image)
  5020    section for more details.
  5021  
  5022  **Status codes**:
  5023  
  5024  -   **200** – no error
  5025  -   **404** – no such service
  5026  -   **406** - node is not part of a swarm
  5027  -   **500** – server error
  5028  
  5029  ### 3.10 Tasks
  5030  
  5031  **Note**: Task operations require the engine to be part of a swarm.
  5032  
  5033  #### List tasks
  5034  
  5035  
  5036  `GET /tasks`
  5037  
  5038  List tasks
  5039  
  5040  **Example request**:
  5041  
  5042      GET /v1.24/tasks HTTP/1.1
  5043  
  5044  **Example response**:
  5045  
  5046      [
  5047        {
  5048          "ID": "0kzzo1i0y4jz6027t0k7aezc7",
  5049          "Version": {
  5050            "Index": 71
  5051          },
  5052          "CreatedAt": "2016-06-07T21:07:31.171892745Z",
  5053          "UpdatedAt": "2016-06-07T21:07:31.376370513Z",
  5054          "Spec": {
  5055            "ContainerSpec": {
  5056              "Image": "redis"
  5057            },
  5058            "Resources": {
  5059              "Limits": {},
  5060              "Reservations": {}
  5061            },
  5062            "RestartPolicy": {
  5063              "Condition": "any",
  5064              "MaxAttempts": 0
  5065            },
  5066            "Placement": {}
  5067          },
  5068          "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz",
  5069          "Slot": 1,
  5070          "NodeID": "60gvrl6tm78dmak4yl7srz94v",
  5071          "Status": {
  5072            "Timestamp": "2016-06-07T21:07:31.290032978Z",
  5073            "State": "running",
  5074            "Message": "started",
  5075            "ContainerStatus": {
  5076              "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035",
  5077              "PID": 677
  5078            }
  5079          },
  5080          "DesiredState": "running",
  5081          "NetworksAttachments": [
  5082            {
  5083              "Network": {
  5084                "ID": "4qvuz4ko70xaltuqbt8956gd1",
  5085                "Version": {
  5086                  "Index": 18
  5087                },
  5088                "CreatedAt": "2016-06-07T20:31:11.912919752Z",
  5089                "UpdatedAt": "2016-06-07T21:07:29.955277358Z",
  5090                "Spec": {
  5091                  "Name": "ingress",
  5092                  "Labels": {
  5093                    "com.docker.swarm.internal": "true"
  5094                  },
  5095                  "DriverConfiguration": {},
  5096                  "IPAMOptions": {
  5097                    "Driver": {},
  5098                    "Configs": [
  5099                      {
  5100                        "Subnet": "10.255.0.0/16",
  5101                        "Gateway": "10.255.0.1"
  5102                      }
  5103                    ]
  5104                  }
  5105                },
  5106                "DriverState": {
  5107                  "Name": "overlay",
  5108                  "Options": {
  5109                    "com.docker.network.driver.overlay.vxlanid_list": "256"
  5110                  }
  5111                },
  5112                "IPAMOptions": {
  5113                  "Driver": {
  5114                    "Name": "default"
  5115                  },
  5116                  "Configs": [
  5117                    {
  5118                      "Subnet": "10.255.0.0/16",
  5119                      "Gateway": "10.255.0.1"
  5120                    }
  5121                  ]
  5122                }
  5123              },
  5124              "Addresses": [
  5125                "10.255.0.10/16"
  5126              ]
  5127            }
  5128          ],
  5129        },
  5130        {
  5131          "ID": "1yljwbmlr8er2waf8orvqpwms",
  5132          "Version": {
  5133            "Index": 30
  5134          },
  5135          "CreatedAt": "2016-06-07T21:07:30.019104782Z",
  5136          "UpdatedAt": "2016-06-07T21:07:30.231958098Z",
  5137          "Name": "hopeful_cori",
  5138          "Spec": {
  5139            "ContainerSpec": {
  5140              "Image": "redis"
  5141            },
  5142            "Resources": {
  5143              "Limits": {},
  5144              "Reservations": {}
  5145            },
  5146            "RestartPolicy": {
  5147              "Condition": "any",
  5148              "MaxAttempts": 0
  5149            },
  5150            "Placement": {}
  5151          },
  5152          "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz",
  5153          "Slot": 1,
  5154          "NodeID": "60gvrl6tm78dmak4yl7srz94v",
  5155          "Status": {
  5156            "Timestamp": "2016-06-07T21:07:30.202183143Z",
  5157            "State": "shutdown",
  5158            "Message": "shutdown",
  5159            "ContainerStatus": {
  5160              "ContainerID": "1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213"
  5161            }
  5162          },
  5163          "DesiredState": "shutdown",
  5164          "NetworksAttachments": [
  5165            {
  5166              "Network": {
  5167                "ID": "4qvuz4ko70xaltuqbt8956gd1",
  5168                "Version": {
  5169                  "Index": 18
  5170                },
  5171                "CreatedAt": "2016-06-07T20:31:11.912919752Z",
  5172                "UpdatedAt": "2016-06-07T21:07:29.955277358Z",
  5173                "Spec": {
  5174                  "Name": "ingress",
  5175                  "Labels": {
  5176                    "com.docker.swarm.internal": "true"
  5177                  },
  5178                  "DriverConfiguration": {},
  5179                  "IPAMOptions": {
  5180                    "Driver": {},
  5181                    "Configs": [
  5182                      {
  5183                        "Subnet": "10.255.0.0/16",
  5184                        "Gateway": "10.255.0.1"
  5185                      }
  5186                    ]
  5187                  }
  5188                },
  5189                "DriverState": {
  5190                  "Name": "overlay",
  5191                  "Options": {
  5192                    "com.docker.network.driver.overlay.vxlanid_list": "256"
  5193                  }
  5194                },
  5195                "IPAMOptions": {
  5196                  "Driver": {
  5197                    "Name": "default"
  5198                  },
  5199                  "Configs": [
  5200                    {
  5201                      "Subnet": "10.255.0.0/16",
  5202                      "Gateway": "10.255.0.1"
  5203                    }
  5204                  ]
  5205                }
  5206              },
  5207              "Addresses": [
  5208                "10.255.0.5/16"
  5209              ]
  5210            }
  5211          ]
  5212        }
  5213      ]
  5214  
  5215  **Query parameters**:
  5216  
  5217  - **filters** – a JSON encoded value of the filters (a `map[string][]string`) to process on the
  5218    services list. Available filters:
  5219    - `id=<task id>`
  5220    - `name=<task name>`
  5221    - `service=<service name>`
  5222    - `node=<node id or name>`
  5223    - `label=key` or `label="key=value"`
  5224    - `desired-state=(running | shutdown | accepted)`
  5225  
  5226  **Status codes**:
  5227  
  5228  -   **200** – no error
  5229  -   **406** - node is not part of a swarm
  5230  -   **500** – server error
  5231  
  5232  #### Inspect a task
  5233  
  5234  
  5235  `GET /tasks/(id)`
  5236  
  5237  Get details on the task `id`
  5238  
  5239  **Example request**:
  5240  
  5241      GET /v1.24/tasks/0kzzo1i0y4jz6027t0k7aezc7 HTTP/1.1
  5242  
  5243  **Example response**:
  5244  
  5245      {
  5246        "ID": "0kzzo1i0y4jz6027t0k7aezc7",
  5247        "Version": {
  5248          "Index": 71
  5249        },
  5250        "CreatedAt": "2016-06-07T21:07:31.171892745Z",
  5251        "UpdatedAt": "2016-06-07T21:07:31.376370513Z",
  5252        "Spec": {
  5253          "ContainerSpec": {
  5254            "Image": "redis"
  5255          },
  5256          "Resources": {
  5257            "Limits": {},
  5258            "Reservations": {}
  5259          },
  5260          "RestartPolicy": {
  5261            "Condition": "any",
  5262            "MaxAttempts": 0
  5263          },
  5264          "Placement": {}
  5265        },
  5266        "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz",
  5267        "Slot": 1,
  5268        "NodeID": "60gvrl6tm78dmak4yl7srz94v",
  5269        "Status": {
  5270          "Timestamp": "2016-06-07T21:07:31.290032978Z",
  5271          "State": "running",
  5272          "Message": "started",
  5273          "ContainerStatus": {
  5274            "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035",
  5275            "PID": 677
  5276          }
  5277        },
  5278        "DesiredState": "running",
  5279        "NetworksAttachments": [
  5280          {
  5281            "Network": {
  5282              "ID": "4qvuz4ko70xaltuqbt8956gd1",
  5283              "Version": {
  5284                "Index": 18
  5285              },
  5286              "CreatedAt": "2016-06-07T20:31:11.912919752Z",
  5287              "UpdatedAt": "2016-06-07T21:07:29.955277358Z",
  5288              "Spec": {
  5289                "Name": "ingress",
  5290                "Labels": {
  5291                  "com.docker.swarm.internal": "true"
  5292                },
  5293                "DriverConfiguration": {},
  5294                "IPAMOptions": {
  5295                  "Driver": {},
  5296                  "Configs": [
  5297                    {
  5298                      "Subnet": "10.255.0.0/16",
  5299                      "Gateway": "10.255.0.1"
  5300                    }
  5301                  ]
  5302                }
  5303              },
  5304              "DriverState": {
  5305                "Name": "overlay",
  5306                "Options": {
  5307                  "com.docker.network.driver.overlay.vxlanid_list": "256"
  5308                }
  5309              },
  5310              "IPAMOptions": {
  5311                "Driver": {
  5312                  "Name": "default"
  5313                },
  5314                "Configs": [
  5315                  {
  5316                    "Subnet": "10.255.0.0/16",
  5317                    "Gateway": "10.255.0.1"
  5318                  }
  5319                ]
  5320              }
  5321            },
  5322            "Addresses": [
  5323              "10.255.0.10/16"
  5324            ]
  5325          }
  5326        ]
  5327      }
  5328  
  5329  **Status codes**:
  5330  
  5331  -   **200** – no error
  5332  -   **404** – unknown task
  5333  -   **406** - node is not part of a swarm
  5334  -   **500** – server error
  5335  
  5336  ## 4. Going further
  5337  
  5338  ### 4.1 Inside `docker run`
  5339  
  5340  As an example, the `docker run` command line makes the following API calls:
  5341  
  5342  - Create the container
  5343  
  5344  - If the status code is 404, it means the image doesn't exist:
  5345      - Try to pull it.
  5346      - Then, retry to create the container.
  5347  
  5348  - Start the container.
  5349  
  5350  - If you are not in detached mode:
  5351  - Attach to the container, using `logs=1` (to have `stdout` and
  5352        `stderr` from the container's start) and `stream=1`
  5353  
  5354  - If in detached mode or only `stdin` is attached, display the container's id.
  5355  
  5356  ### 4.2 Hijacking
  5357  
  5358  In this version of the API, `/attach`, uses hijacking to transport `stdin`,
  5359  `stdout`, and `stderr` on the same socket.
  5360  
  5361  To hint potential proxies about connection hijacking, Docker client sends
  5362  connection upgrade headers similarly to websocket.
  5363  
  5364      Upgrade: tcp
  5365      Connection: Upgrade
  5366  
  5367  When Docker daemon detects the `Upgrade` header, it switches its status code
  5368  from **200 OK** to **101 UPGRADED** and resends the same headers.
  5369  
  5370  
  5371  ### 4.3 CORS Requests
  5372  
  5373  To set cross origin requests to the Engine API please give values to
  5374  `--api-cors-header` when running Docker in daemon mode. Set * (asterisk) allows all,
  5375  default or blank means CORS disabled
  5376  
  5377      $ dockerd -H="192.168.1.9:2375" --api-cors-header="http://foo.bar"