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