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