github.com/squaremo/docker@v1.3.2-0.20150516120342-42cfc9554972/docs/sources/reference/api/docker_remote_api_v1.19.md (about) 1 page_title: Remote API v1.19 2 page_description: API Documentation for Docker 3 page_keywords: API, Docker, rcli, REST, documentation 4 5 # Docker Remote API v1.19 6 7 ## 1. Brief introduction 8 9 - The Remote API has replaced `rcli`. 10 - The daemon listens on `unix:///var/run/docker.sock` but you can 11 [Bind Docker to another host/port or a Unix socket]( 12 /articles/basics/#bind-docker-to-another-hostport-or-a-unix-socket). 13 - The API tends to be REST, but for some complex commands, like `attach` 14 or `pull`, the HTTP connection is hijacked to transport `STDOUT`, 15 `STDIN` and `STDERR`. 16 17 # 2. Endpoints 18 19 ## 2.1 Containers 20 21 ### List containers 22 23 `GET /containers/json` 24 25 List containers 26 27 **Example request**: 28 29 GET /containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1 30 31 **Example response**: 32 33 HTTP/1.1 200 OK 34 Content-Type: application/json 35 36 [ 37 { 38 "Id": "8dfafdbc3a40", 39 "Image": "ubuntu:latest", 40 "Command": "echo 1", 41 "Created": 1367854155, 42 "Status": "Exit 0", 43 "Ports": [{"PrivatePort": 2222, "PublicPort": 3333, "Type": "tcp"}], 44 "SizeRw": 12288, 45 "SizeRootFs": 0 46 }, 47 { 48 "Id": "9cd87474be90", 49 "Image": "ubuntu:latest", 50 "Command": "echo 222222", 51 "Created": 1367854155, 52 "Status": "Exit 0", 53 "Ports": [], 54 "SizeRw": 12288, 55 "SizeRootFs": 0 56 }, 57 { 58 "Id": "3176a2479c92", 59 "Image": "ubuntu:latest", 60 "Command": "echo 3333333333333333", 61 "Created": 1367854154, 62 "Status": "Exit 0", 63 "Ports":[], 64 "SizeRw":12288, 65 "SizeRootFs":0 66 }, 67 { 68 "Id": "4cb07b47f9fb", 69 "Image": "ubuntu:latest", 70 "Command": "echo 444444444444444444444444444444444", 71 "Created": 1367854152, 72 "Status": "Exit 0", 73 "Ports": [], 74 "SizeRw": 12288, 75 "SizeRootFs": 0 76 } 77 ] 78 79 Query Parameters: 80 81 - **all** – 1/True/true or 0/False/false, Show all containers. 82 Only running containers are shown by default (i.e., this defaults to false) 83 - **limit** – Show `limit` last created 84 containers, include non-running ones. 85 - **since** – Show only containers created since Id, include 86 non-running ones. 87 - **before** – Show only containers created before Id, include 88 non-running ones. 89 - **size** – 1/True/true or 0/False/false, Show the containers 90 sizes 91 - **filters** - a json encoded value of the filters (a map[string][]string) to process on the containers list. Available filters: 92 - exited=<int> -- containers with exit code of <int> 93 - status=(restarting|running|paused|exited) 94 - label=`key` or `key=value` of a container label 95 96 Status Codes: 97 98 - **200** – no error 99 - **400** – bad parameter 100 - **500** – server error 101 102 ### Create a container 103 104 `POST /containers/create` 105 106 Create a container 107 108 **Example request**: 109 110 POST /containers/create HTTP/1.1 111 Content-Type: application/json 112 113 { 114 "Hostname": "", 115 "Domainname": "", 116 "User": "", 117 "AttachStdin": false, 118 "AttachStdout": true, 119 "AttachStderr": true, 120 "Tty": false, 121 "OpenStdin": false, 122 "StdinOnce": false, 123 "Env": null, 124 "Cmd": [ 125 "date" 126 ], 127 "Entrypoint": "", 128 "Image": "ubuntu", 129 "Labels": { 130 "com.example.vendor": "Acme", 131 "com.example.license": "GPL", 132 "com.example.version": "1.0" 133 }, 134 "Volumes": { 135 "/tmp": {} 136 }, 137 "WorkingDir": "", 138 "NetworkDisabled": false, 139 "MacAddress": "12:34:56:78:9a:bc", 140 "ExposedPorts": { 141 "22/tcp": {} 142 }, 143 "HostConfig": { 144 "Binds": ["/tmp:/tmp"], 145 "Links": ["redis3:redis"], 146 "LxcConf": {"lxc.utsname":"docker"}, 147 "Memory": 0, 148 "MemorySwap": 0, 149 "CpuShares": 512, 150 "CpuPeriod": 100000, 151 "CpusetCpus": "0,1", 152 "CpusetMems": "0,1", 153 "BlkioWeight": 300, 154 "OomKillDisable": false, 155 "PortBindings": { "22/tcp": [{ "HostPort": "11022" }] }, 156 "PublishAllPorts": false, 157 "Privileged": false, 158 "ReadonlyRootfs": false, 159 "Dns": ["8.8.8.8"], 160 "DnsSearch": [""], 161 "ExtraHosts": null, 162 "VolumesFrom": ["parent", "other:ro"], 163 "CapAdd": ["NET_ADMIN"], 164 "CapDrop": ["MKNOD"], 165 "RestartPolicy": { "Name": "", "MaximumRetryCount": 0 }, 166 "NetworkMode": "bridge", 167 "Devices": [], 168 "Ulimits": [{}], 169 "LogConfig": { "Type": "json-file", "Config": {} }, 170 "SecurityOpt": [""], 171 "CgroupParent": "" 172 } 173 } 174 175 **Example response**: 176 177 HTTP/1.1 201 Created 178 Content-Type: application/json 179 180 { 181 "Id":"e90e34656806" 182 "Warnings":[] 183 } 184 185 Json Parameters: 186 187 - **Hostname** - A string value containing the desired hostname to use for the 188 container. 189 - **Domainname** - A string value containing the desired domain name to use 190 for the container. 191 - **User** - A string value containing the user to use inside the container. 192 - **Memory** - Memory limit in bytes. 193 - **MemorySwap**- Total memory limit (memory + swap); set `-1` to disable swap, 194 always use this with `memory`, and make the value larger than `memory`. 195 - **CpuShares** - An integer value containing the CPU Shares for container 196 (ie. the relative weight vs other containers). 197 - **CpuPeriod** - The length of a CPU period (in microseconds). 198 - **Cpuset** - The same as CpusetCpus, but deprecated, please don't use. 199 - **CpusetCpus** - String value containing the cgroups CpusetCpus to use. 200 - **CpusetMems** - Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems. 201 - **BlkioWeight** - Block IO weight (relative weight) accepts a weight value between 10 and 1000. 202 - **OomKillDisable** - Boolean value, whether to disable OOM Killer for the container or not. 203 - **AttachStdin** - Boolean value, attaches to stdin. 204 - **AttachStdout** - Boolean value, attaches to stdout. 205 - **AttachStderr** - Boolean value, attaches to stderr. 206 - **Tty** - Boolean value, Attach standard streams to a tty, including stdin if it is not closed. 207 - **OpenStdin** - Boolean value, opens stdin, 208 - **StdinOnce** - Boolean value, close stdin after the 1 attached client disconnects. 209 - **Env** - A list of environment variables in the form of `VAR=value` 210 - **Labels** - Adds a map of labels that to a container. To specify a map: `{"key":"value"[,"key2":"value2"]}` 211 - **Cmd** - Command to run specified as a string or an array of strings. 212 - **Entrypoint** - Set the entrypoint for the container a a string or an array 213 of strings 214 - **Image** - String value containing the image name to use for the container 215 - **Volumes** – An object mapping mountpoint paths (strings) inside the 216 container to empty objects. 217 - **WorkingDir** - A string value containing the working dir for commands to 218 run in. 219 - **NetworkDisabled** - Boolean value, when true disables networking for the 220 container 221 - **ExposedPorts** - An object mapping ports to an empty object in the form of: 222 `"ExposedPorts": { "<port>/<tcp|udp>: {}" }` 223 - **HostConfig** 224 - **Binds** – A list of volume bindings for this container. Each volume 225 binding is a string of the form `container_path` (to create a new 226 volume for the container), `host_path:container_path` (to bind-mount 227 a host path into the container), or `host_path:container_path:ro` 228 (to make the bind-mount read-only inside the container). 229 - **Links** - A list of links for the container. Each link entry should be 230 in the form of `container_name:alias`. 231 - **LxcConf** - LXC specific configurations. These configurations will only 232 work when using the `lxc` execution driver. 233 - **PortBindings** - A map of exposed container ports and the host port they 234 should map to. It should be specified in the form 235 `{ <port>/<protocol>: [{ "HostPort": "<port>" }] }` 236 Take note that `port` is specified as a string and not an integer value. 237 - **PublishAllPorts** - Allocates a random host port for all of a container's 238 exposed ports. Specified as a boolean value. 239 - **Privileged** - Gives the container full access to the host. Specified as 240 a boolean value. 241 - **ReadonlyRootfs** - Mount the container's root filesystem as read only. 242 Specified as a boolean value. 243 - **Dns** - A list of dns servers for the container to use. 244 - **DnsSearch** - A list of DNS search domains 245 - **ExtraHosts** - A list of hostnames/IP mappings to be added to the 246 container's `/etc/hosts` file. Specified in the form `["hostname:IP"]`. 247 - **VolumesFrom** - A list of volumes to inherit from another container. 248 Specified in the form `<container name>[:<ro|rw>]` 249 - **CapAdd** - A list of kernel capabilities to add to the container. 250 - **Capdrop** - A list of kernel capabilities to drop from the container. 251 - **RestartPolicy** – The behavior to apply when the container exits. The 252 value is an object with a `Name` property of either `"always"` to 253 always restart or `"on-failure"` to restart only when the container 254 exit code is non-zero. If `on-failure` is used, `MaximumRetryCount` 255 controls the number of times to retry before giving up. 256 The default is not to restart. (optional) 257 An ever increasing delay (double the previous delay, starting at 100mS) 258 is added before each restart to prevent flooding the server. 259 - **NetworkMode** - Sets the networking mode for the container. Supported 260 values are: `bridge`, `host`, and `container:<name|id>` 261 - **Devices** - A list of devices to add to the container specified in the 262 form 263 `{ "PathOnHost": "/dev/deviceName", "PathInContainer": "/dev/deviceName", "CgroupPermissions": "mrw"}` 264 - **Ulimits** - A list of ulimits to be set in the container, specified as 265 `{ "Name": <name>, "Soft": <soft limit>, "Hard": <hard limit> }`, for example: 266 `Ulimits: { "Name": "nofile", "Soft": 1024, "Hard", 2048 }}` 267 - **SecurityOpt**: A list of string values to customize labels for MLS 268 systems, such as SELinux. 269 - **LogConfig** - Log configuration for the container, specified as 270 `{ "Type": "<driver_name>", "Config": {"key1": "val1"}}`. 271 Available types: `json-file`, `syslog`, `journald`, `none`. 272 `json-file` logging driver. 273 - **CgroupParent** - Path to cgroups under which the cgroup for the container will be created. If the path is not absolute, the path is considered to be relative to the cgroups path of the init process. Cgroups will be created if they do not already exist. 274 275 Query Parameters: 276 277 - **name** – Assign the specified name to the container. Must 278 match `/?[a-zA-Z0-9_-]+`. 279 280 Status Codes: 281 282 - **201** – no error 283 - **404** – no such container 284 - **406** – impossible to attach (container not running) 285 - **500** – server error 286 287 ### Inspect a container 288 289 `GET /containers/(id)/json` 290 291 Return low-level information on the container `id` 292 293 294 **Example request**: 295 296 GET /containers/4fa6e0f0c678/json HTTP/1.1 297 298 **Example response**: 299 300 HTTP/1.1 200 OK 301 Content-Type: application/json 302 303 { 304 "AppArmorProfile": "", 305 "Args": [ 306 "-c", 307 "exit 9" 308 ], 309 "Config": { 310 "AttachStderr": true, 311 "AttachStdin": false, 312 "AttachStdout": true, 313 "Cmd": [ 314 "/bin/sh", 315 "-c", 316 "exit 9" 317 ], 318 "Domainname": "", 319 "Entrypoint": null, 320 "Env": [ 321 "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" 322 ], 323 "ExposedPorts": null, 324 "Hostname": "ba033ac44011", 325 "Image": "ubuntu", 326 "Labels": { 327 "com.example.vendor": "Acme", 328 "com.example.license": "GPL", 329 "com.example.version": "1.0" 330 }, 331 "MacAddress": "", 332 "NetworkDisabled": false, 333 "OnBuild": null, 334 "OpenStdin": false, 335 "PortSpecs": null, 336 "StdinOnce": false, 337 "Tty": false, 338 "User": "", 339 "Volumes": null, 340 "WorkingDir": "" 341 }, 342 "Created": "2015-01-06T15:47:31.485331387Z", 343 "Driver": "devicemapper", 344 "ExecDriver": "native-0.2", 345 "ExecIDs": null, 346 "HostConfig": { 347 "Binds": null, 348 "BlkioWeight": 0, 349 "CapAdd": null, 350 "CapDrop": null, 351 "ContainerIDFile": "", 352 "CpusetCpus": "", 353 "CpusetMems": "", 354 "CpuShares": 0, 355 "CpuPeriod": 100000, 356 "Devices": [], 357 "Dns": null, 358 "DnsSearch": null, 359 "ExtraHosts": null, 360 "IpcMode": "", 361 "Links": null, 362 "LxcConf": [], 363 "Memory": 0, 364 "MemorySwap": 0, 365 "OomKillDisable": false, 366 "NetworkMode": "bridge", 367 "PortBindings": {}, 368 "Privileged": false, 369 "ReadonlyRootfs": false, 370 "PublishAllPorts": false, 371 "RestartPolicy": { 372 "MaximumRetryCount": 2, 373 "Name": "on-failure" 374 }, 375 "LogConfig": { 376 "Config": null, 377 "Type": "json-file" 378 }, 379 "SecurityOpt": null, 380 "VolumesFrom": null, 381 "Ulimits": [{}] 382 }, 383 "HostnamePath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname", 384 "HostsPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts", 385 "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", 386 "Id": "ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39", 387 "Image": "04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2", 388 "MountLabel": "", 389 "Name": "/boring_euclid", 390 "NetworkSettings": { 391 "Bridge": "", 392 "Gateway": "", 393 "IPAddress": "", 394 "IPPrefixLen": 0, 395 "MacAddress": "", 396 "PortMapping": null, 397 "Ports": null 398 }, 399 "Path": "/bin/sh", 400 "ProcessLabel": "", 401 "ResolvConfPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf", 402 "RestartCount": 1, 403 "State": { 404 "Error": "", 405 "ExitCode": 9, 406 "FinishedAt": "2015-01-06T15:47:32.080254511Z", 407 "OOMKilled": false, 408 "Paused": false, 409 "Pid": 0, 410 "Restarting": false, 411 "Running": false, 412 "StartedAt": "2015-01-06T15:47:32.072697474Z" 413 }, 414 "Volumes": {}, 415 "VolumesRW": {} 416 } 417 418 Status Codes: 419 420 - **200** – no error 421 - **404** – no such container 422 - **500** – server error 423 424 ### List processes running inside a container 425 426 `GET /containers/(id)/top` 427 428 List processes running inside the container `id` 429 430 **Example request**: 431 432 GET /containers/4fa6e0f0c678/top HTTP/1.1 433 434 **Example response**: 435 436 HTTP/1.1 200 OK 437 Content-Type: application/json 438 439 { 440 "Titles": [ 441 "USER", 442 "PID", 443 "%CPU", 444 "%MEM", 445 "VSZ", 446 "RSS", 447 "TTY", 448 "STAT", 449 "START", 450 "TIME", 451 "COMMAND" 452 ], 453 "Processes": [ 454 ["root","20147","0.0","0.1","18060","1864","pts/4","S","10:06","0:00","bash"], 455 ["root","20271","0.0","0.0","4312","352","pts/4","S+","10:07","0:00","sleep","10"] 456 ] 457 } 458 459 Query Parameters: 460 461 - **ps_args** – ps arguments to use (e.g., aux) 462 463 Status Codes: 464 465 - **200** – no error 466 - **404** – no such container 467 - **500** – server error 468 469 ### Get container logs 470 471 `GET /containers/(id)/logs` 472 473 Get stdout and stderr logs from the container ``id`` 474 475 > **Note**: 476 > This endpoint works only for containers with `json-file` logging driver. 477 478 **Example request**: 479 480 GET /containers/4fa6e0f0c678/logs?stderr=1&stdout=1×tamps=1&follow=1&tail=10&since=1428990821 HTTP/1.1 481 482 **Example response**: 483 484 HTTP/1.1 101 UPGRADED 485 Content-Type: application/vnd.docker.raw-stream 486 Connection: Upgrade 487 Upgrade: tcp 488 489 {{ STREAM }} 490 491 Query Parameters: 492 493 - **follow** – 1/True/true or 0/False/false, return stream. Default false 494 - **stdout** – 1/True/true or 0/False/false, show stdout log. Default false 495 - **stderr** – 1/True/true or 0/False/false, show stderr log. Default false 496 - **since** – UNIX timestamp (integer) to filter logs. Specifying a timestamp 497 will only output log-entries since that timestamp. Default: 0 (unfiltered) 498 - **timestamps** – 1/True/true or 0/False/false, print timestamps for 499 every log line. Default false 500 - **tail** – Output specified number of lines at the end of logs: `all` or `<number>`. Default all 501 502 Status Codes: 503 504 - **101** – no error, hints proxy about hijacking 505 - **200** – no error, no upgrade header found 506 - **404** – no such container 507 - **500** – server error 508 509 ### Inspect changes on a container's filesystem 510 511 `GET /containers/(id)/changes` 512 513 Inspect changes on container `id`'s filesystem 514 515 **Example request**: 516 517 GET /containers/4fa6e0f0c678/changes HTTP/1.1 518 519 **Example response**: 520 521 HTTP/1.1 200 OK 522 Content-Type: application/json 523 524 [ 525 { 526 "Path": "/dev", 527 "Kind": 0 528 }, 529 { 530 "Path": "/dev/kmsg", 531 "Kind": 1 532 }, 533 { 534 "Path": "/test", 535 "Kind": 1 536 } 537 ] 538 539 Values for `Kind`: 540 541 - `0`: Modify 542 - `1`: Add 543 - `2`: Delete 544 545 Status Codes: 546 547 - **200** – no error 548 - **404** – no such container 549 - **500** – server error 550 551 ### Export a container 552 553 `GET /containers/(id)/export` 554 555 Export the contents of container `id` 556 557 **Example request**: 558 559 GET /containers/4fa6e0f0c678/export HTTP/1.1 560 561 **Example response**: 562 563 HTTP/1.1 200 OK 564 Content-Type: application/octet-stream 565 566 {{ TAR STREAM }} 567 568 Status Codes: 569 570 - **200** – no error 571 - **404** – no such container 572 - **500** – server error 573 574 ### Get container stats based on resource usage 575 576 `GET /containers/(id)/stats` 577 578 This endpoint returns a live stream of a container's resource usage statistics. 579 580 > **Note**: this functionality currently only works when using the *libcontainer* exec-driver. 581 582 **Example request**: 583 584 GET /containers/redis1/stats HTTP/1.1 585 586 **Example response**: 587 588 HTTP/1.1 200 OK 589 Content-Type: application/json 590 591 { 592 "read" : "2015-01-08T22:57:31.547920715Z", 593 "network" : { 594 "rx_dropped" : 0, 595 "rx_bytes" : 648, 596 "rx_errors" : 0, 597 "tx_packets" : 8, 598 "tx_dropped" : 0, 599 "rx_packets" : 8, 600 "tx_errors" : 0, 601 "tx_bytes" : 648 602 }, 603 "memory_stats" : { 604 "stats" : { 605 "total_pgmajfault" : 0, 606 "cache" : 0, 607 "mapped_file" : 0, 608 "total_inactive_file" : 0, 609 "pgpgout" : 414, 610 "rss" : 6537216, 611 "total_mapped_file" : 0, 612 "writeback" : 0, 613 "unevictable" : 0, 614 "pgpgin" : 477, 615 "total_unevictable" : 0, 616 "pgmajfault" : 0, 617 "total_rss" : 6537216, 618 "total_rss_huge" : 6291456, 619 "total_writeback" : 0, 620 "total_inactive_anon" : 0, 621 "rss_huge" : 6291456, 622 "hierarchical_memory_limit" : 67108864, 623 "total_pgfault" : 964, 624 "total_active_file" : 0, 625 "active_anon" : 6537216, 626 "total_active_anon" : 6537216, 627 "total_pgpgout" : 414, 628 "total_cache" : 0, 629 "inactive_anon" : 0, 630 "active_file" : 0, 631 "pgfault" : 964, 632 "inactive_file" : 0, 633 "total_pgpgin" : 477 634 }, 635 "max_usage" : 6651904, 636 "usage" : 6537216, 637 "failcnt" : 0, 638 "limit" : 67108864 639 }, 640 "blkio_stats" : {}, 641 "cpu_stats" : { 642 "cpu_usage" : { 643 "percpu_usage" : [ 644 16970827, 645 1839451, 646 7107380, 647 10571290 648 ], 649 "usage_in_usermode" : 10000000, 650 "total_usage" : 36488948, 651 "usage_in_kernelmode" : 20000000 652 }, 653 "system_cpu_usage" : 20091722000000000, 654 "throttling_data" : {} 655 } 656 } 657 658 Query Parameters: 659 660 - **stream** – 1/True/true or 0/False/false, pull stats once then disconnect. Default true 661 662 Status Codes: 663 664 - **200** – no error 665 - **404** – no such container 666 - **500** – server error 667 668 ### Resize a container TTY 669 670 `POST /containers/(id)/resize?h=<height>&w=<width>` 671 672 Resize the TTY for container with `id`. The container must be restarted for the resize to take effect. 673 674 **Example request**: 675 676 POST /containers/4fa6e0f0c678/resize?h=40&w=80 HTTP/1.1 677 678 **Example response**: 679 680 HTTP/1.1 200 OK 681 Content-Length: 0 682 Content-Type: text/plain; charset=utf-8 683 684 Status Codes: 685 686 - **200** – no error 687 - **404** – No such container 688 - **500** – Cannot resize container 689 690 ### Start a container 691 692 `POST /containers/(id)/start` 693 694 Start the container `id` 695 696 **Example request**: 697 698 POST /containers/(id)/start HTTP/1.1 699 Content-Type: application/json 700 701 { 702 "Binds": ["/tmp:/tmp"], 703 "Links": ["redis3:redis"], 704 "LxcConf": {"lxc.utsname":"docker"}, 705 "Memory": 0, 706 "MemorySwap": 0, 707 "CpuShares": 512, 708 "CpusetCpus": "0,1", 709 "PortBindings": { "22/tcp": [{ "HostPort": "11022" }] }, 710 "PublishAllPorts": false, 711 "Privileged": false, 712 "ReadonlyRootfs": false, 713 "Dns": ["8.8.8.8"], 714 "DnsSearch": [""], 715 "ExtraHosts": null, 716 "VolumesFrom": ["parent", "other:ro"], 717 "CapAdd": ["NET_ADMIN"], 718 "CapDrop": ["MKNOD"], 719 "RestartPolicy": { "Name": "", "MaximumRetryCount": 0 }, 720 "NetworkMode": "bridge", 721 "Devices": [], 722 "Ulimits": [{}], 723 "LogConfig": { "Type": "json-file", "Config": {} }, 724 "SecurityOpt": [""], 725 "CgroupParent": "" 726 } 727 728 **Example response**: 729 730 HTTP/1.1 204 No Content 731 732 Json Parameters: 733 734 - **Binds** – A list of volume bindings for this container. Each volume 735 binding is a string of the form `container_path` (to create a new 736 volume for the container), `host_path:container_path` (to bind-mount 737 a host path into the container), or `host_path:container_path:ro` 738 (to make the bind-mount read-only inside the container). 739 - **Links** - A list of links for the container. Each link entry should be of 740 of the form `container_name:alias`. 741 - **LxcConf** - LXC specific configurations. These configurations will only 742 work when using the `lxc` execution driver. 743 - **PortBindings** - A map of exposed container ports and the host port they 744 should map to. It should be specified in the form 745 `{ <port>/<protocol>: [{ "HostPort": "<port>" }] }` 746 Take note that `port` is specified as a string and not an integer value. 747 - **PublishAllPorts** - Allocates a random host port for all of a container's 748 exposed ports. Specified as a boolean value. 749 - **Privileged** - Gives the container full access to the host. Specified as 750 a boolean value. 751 - **ReadonlyRootfs** - Mount the container's root filesystem as read only. 752 Specified as a boolean value. 753 - **Dns** - A list of dns servers for the container to use. 754 - **DnsSearch** - A list of DNS search domains 755 - **ExtraHosts** - A list of hostnames/IP mappings to be added to the 756 container's `/etc/hosts` file. Specified in the form `["hostname:IP"]`. 757 - **VolumesFrom** - A list of volumes to inherit from another container. 758 Specified in the form `<container name>[:<ro|rw>]` 759 - **CapAdd** - A list of kernel capabilities to add to the container. 760 - **Capdrop** - A list of kernel capabilities to drop from the container. 761 - **RestartPolicy** – The behavior to apply when the container exits. The 762 value is an object with a `Name` property of either `"always"` to 763 always restart or `"on-failure"` to restart only when the container 764 exit code is non-zero. If `on-failure` is used, `MaximumRetryCount` 765 controls the number of times to retry before giving up. 766 The default is not to restart. (optional) 767 An ever increasing delay (double the previous delay, starting at 100mS) 768 is added before each restart to prevent flooding the server. 769 - **NetworkMode** - Sets the networking mode for the container. Supported 770 values are: `bridge`, `host`, and `container:<name|id>` 771 - **Devices** - A list of devices to add to the container specified in the 772 form 773 `{ "PathOnHost": "/dev/deviceName", "PathInContainer": "/dev/deviceName", "CgroupPermissions": "mrw"}` 774 - **Ulimits** - A list of ulimits to be set in the container, specified as 775 `{ "Name": <name>, "Soft": <soft limit>, "Hard": <hard limit> }`, for example: 776 `Ulimits: { "Name": "nofile", "Soft": 1024, "Hard", 2048 }}` 777 - **SecurityOpt**: A list of string values to customize labels for MLS 778 systems, such as SELinux. 779 - **LogConfig** - Log configuration for the container, specified as 780 `{ "Type": "<driver_name>", "Config": {"key1": "val1"}}`. 781 Available types: `json-file`, `syslog`, `journald`, `none`. 782 `json-file` logging driver. 783 - **CgroupParent** - Path to cgroups under which the cgroup for the container will be created. If the path is not absolute, the path is considered to be relative to the cgroups path of the init process. Cgroups will be created if they do not already exist. 784 785 Status Codes: 786 787 - **204** – no error 788 - **304** – container already started 789 - **404** – no such container 790 - **500** – server error 791 792 ### Stop a container 793 794 `POST /containers/(id)/stop` 795 796 Stop the container `id` 797 798 **Example request**: 799 800 POST /containers/e90e34656806/stop?t=5 HTTP/1.1 801 802 **Example response**: 803 804 HTTP/1.1 204 No Content 805 806 Query Parameters: 807 808 - **t** – number of seconds to wait before killing the container 809 810 Status Codes: 811 812 - **204** – no error 813 - **304** – container already stopped 814 - **404** – no such container 815 - **500** – server error 816 817 ### Restart a container 818 819 `POST /containers/(id)/restart` 820 821 Restart the container `id` 822 823 **Example request**: 824 825 POST /containers/e90e34656806/restart?t=5 HTTP/1.1 826 827 **Example response**: 828 829 HTTP/1.1 204 No Content 830 831 Query Parameters: 832 833 - **t** – number of seconds to wait before killing the container 834 835 Status Codes: 836 837 - **204** – no error 838 - **404** – no such container 839 - **500** – server error 840 841 ### Kill a container 842 843 `POST /containers/(id)/kill` 844 845 Kill the container `id` 846 847 **Example request**: 848 849 POST /containers/e90e34656806/kill HTTP/1.1 850 851 **Example response**: 852 853 HTTP/1.1 204 No Content 854 855 Query Parameters 856 857 - **signal** - Signal to send to the container: integer or string like "SIGINT". 858 When not set, SIGKILL is assumed and the call will waits for the container to exit. 859 860 Status Codes: 861 862 - **204** – no error 863 - **404** – no such container 864 - **500** – server error 865 866 ### Rename a container 867 868 `POST /containers/(id)/rename` 869 870 Rename the container `id` to a `new_name` 871 872 **Example request**: 873 874 POST /containers/e90e34656806/rename?name=new_name HTTP/1.1 875 876 **Example response**: 877 878 HTTP/1.1 204 No Content 879 880 Query Parameters: 881 882 - **name** – new name for the container 883 884 Status Codes: 885 886 - **204** – no error 887 - **404** – no such container 888 - **409** - conflict name already assigned 889 - **500** – server error 890 891 ### Pause a container 892 893 `POST /containers/(id)/pause` 894 895 Pause the container `id` 896 897 **Example request**: 898 899 POST /containers/e90e34656806/pause HTTP/1.1 900 901 **Example response**: 902 903 HTTP/1.1 204 No Content 904 905 Status Codes: 906 907 - **204** – no error 908 - **404** – no such container 909 - **500** – server error 910 911 ### Unpause a container 912 913 `POST /containers/(id)/unpause` 914 915 Unpause the container `id` 916 917 **Example request**: 918 919 POST /containers/e90e34656806/unpause HTTP/1.1 920 921 **Example response**: 922 923 HTTP/1.1 204 No Content 924 925 Status Codes: 926 927 - **204** – no error 928 - **404** – no such container 929 - **500** – server error 930 931 ### Attach to a container 932 933 `POST /containers/(id)/attach` 934 935 Attach to the container `id` 936 937 **Example request**: 938 939 POST /containers/16253994b7c4/attach?logs=1&stream=0&stdout=1 HTTP/1.1 940 941 **Example response**: 942 943 HTTP/1.1 101 UPGRADED 944 Content-Type: application/vnd.docker.raw-stream 945 Connection: Upgrade 946 Upgrade: tcp 947 948 {{ STREAM }} 949 950 Query Parameters: 951 952 - **logs** – 1/True/true or 0/False/false, return logs. Default false 953 - **stream** – 1/True/true or 0/False/false, return stream. 954 Default false 955 - **stdin** – 1/True/true or 0/False/false, if stream=true, attach 956 to stdin. Default false 957 - **stdout** – 1/True/true or 0/False/false, if logs=true, return 958 stdout log, if stream=true, attach to stdout. Default false 959 - **stderr** – 1/True/true or 0/False/false, if logs=true, return 960 stderr log, if stream=true, attach to stderr. Default false 961 962 Status Codes: 963 964 - **101** – no error, hints proxy about hijacking 965 - **200** – no error, no upgrade header found 966 - **400** – bad parameter 967 - **404** – no such container 968 - **500** – server error 969 970 **Stream details**: 971 972 When using the TTY setting is enabled in 973 [`POST /containers/create` 974 ](/reference/api/docker_remote_api_v1.9/#create-a-container "POST /containers/create"), 975 the stream is the raw data from the process PTY and client's stdin. 976 When the TTY is disabled, then the stream is multiplexed to separate 977 stdout and stderr. 978 979 The format is a **Header** and a **Payload** (frame). 980 981 **HEADER** 982 983 The header will contain the information on which stream write the 984 stream (stdout or stderr). It also contain the size of the 985 associated frame encoded on the last 4 bytes (uint32). 986 987 It is encoded on the first 8 bytes like this: 988 989 header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4} 990 991 `STREAM_TYPE` can be: 992 993 - 0: stdin (will be written on stdout) 994 - 1: stdout 995 - 2: stderr 996 997 `SIZE1, SIZE2, SIZE3, SIZE4` are the 4 bytes of 998 the uint32 size encoded as big endian. 999 1000 **PAYLOAD** 1001 1002 The payload is the raw stream. 1003 1004 **IMPLEMENTATION** 1005 1006 The simplest way to implement the Attach protocol is the following: 1007 1008 1. Read 8 bytes 1009 2. chose stdout or stderr depending on the first byte 1010 3. Extract the frame size from the last 4 bytes 1011 4. Read the extracted size and output it on the correct output 1012 5. Goto 1 1013 1014 ### Attach to a container (websocket) 1015 1016 `GET /containers/(id)/attach/ws` 1017 1018 Attach to the container `id` via websocket 1019 1020 Implements websocket protocol handshake according to [RFC 6455](http://tools.ietf.org/html/rfc6455) 1021 1022 **Example request** 1023 1024 GET /containers/e90e34656806/attach/ws?logs=0&stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1 1025 1026 **Example response** 1027 1028 {{ STREAM }} 1029 1030 Query Parameters: 1031 1032 - **logs** – 1/True/true or 0/False/false, return logs. Default false 1033 - **stream** – 1/True/true or 0/False/false, return stream. 1034 Default false 1035 - **stdin** – 1/True/true or 0/False/false, if stream=true, attach 1036 to stdin. Default false 1037 - **stdout** – 1/True/true or 0/False/false, if logs=true, return 1038 stdout log, if stream=true, attach to stdout. Default false 1039 - **stderr** – 1/True/true or 0/False/false, if logs=true, return 1040 stderr log, if stream=true, attach to stderr. Default false 1041 1042 Status Codes: 1043 1044 - **200** – no error 1045 - **400** – bad parameter 1046 - **404** – no such container 1047 - **500** – server error 1048 1049 ### Wait a container 1050 1051 `POST /containers/(id)/wait` 1052 1053 Block until container `id` stops, then returns the exit code 1054 1055 **Example request**: 1056 1057 POST /containers/16253994b7c4/wait HTTP/1.1 1058 1059 **Example response**: 1060 1061 HTTP/1.1 200 OK 1062 Content-Type: application/json 1063 1064 {"StatusCode": 0} 1065 1066 Status Codes: 1067 1068 - **200** – no error 1069 - **404** – no such container 1070 - **500** – server error 1071 1072 ### Remove a container 1073 1074 `DELETE /containers/(id)` 1075 1076 Remove the container `id` from the filesystem 1077 1078 **Example request**: 1079 1080 DELETE /containers/16253994b7c4?v=1 HTTP/1.1 1081 1082 **Example response**: 1083 1084 HTTP/1.1 204 No Content 1085 1086 Query Parameters: 1087 1088 - **v** – 1/True/true or 0/False/false, Remove the volumes 1089 associated to the container. Default false 1090 - **force** - 1/True/true or 0/False/false, Kill then remove the container. 1091 Default false 1092 1093 Status Codes: 1094 1095 - **204** – no error 1096 - **400** – bad parameter 1097 - **404** – no such container 1098 - **500** – server error 1099 1100 ### Copy files or folders from a container 1101 1102 `POST /containers/(id)/copy` 1103 1104 Copy files or folders of container `id` 1105 1106 **Example request**: 1107 1108 POST /containers/4fa6e0f0c678/copy HTTP/1.1 1109 Content-Type: application/json 1110 1111 { 1112 "Resource": "test.txt" 1113 } 1114 1115 **Example response**: 1116 1117 HTTP/1.1 200 OK 1118 Content-Type: application/x-tar 1119 1120 {{ TAR STREAM }} 1121 1122 Status Codes: 1123 1124 - **200** – no error 1125 - **404** – no such container 1126 - **500** – server error 1127 1128 ## 2.2 Images 1129 1130 ### List Images 1131 1132 `GET /images/json` 1133 1134 **Example request**: 1135 1136 GET /images/json?all=0 HTTP/1.1 1137 1138 **Example response**: 1139 1140 HTTP/1.1 200 OK 1141 Content-Type: application/json 1142 1143 [ 1144 { 1145 "RepoTags": [ 1146 "ubuntu:12.04", 1147 "ubuntu:precise", 1148 "ubuntu:latest" 1149 ], 1150 "Id": "8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c", 1151 "Created": 1365714795, 1152 "Size": 131506275, 1153 "VirtualSize": 131506275 1154 }, 1155 { 1156 "RepoTags": [ 1157 "ubuntu:12.10", 1158 "ubuntu:quantal" 1159 ], 1160 "ParentId": "27cf784147099545", 1161 "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc", 1162 "Created": 1364102658, 1163 "Size": 24653, 1164 "VirtualSize": 180116135 1165 } 1166 ] 1167 1168 **Example request, with digest information**: 1169 1170 GET /images/json?digests=1 HTTP/1.1 1171 1172 **Example response, with digest information**: 1173 1174 HTTP/1.1 200 OK 1175 Content-Type: application/json 1176 1177 [ 1178 { 1179 "Created": 1420064636, 1180 "Id": "4986bf8c15363d1c5d15512d5266f8777bfba4974ac56e3270e7760f6f0a8125", 1181 "ParentId": "ea13149945cb6b1e746bf28032f02e9b5a793523481a0a18645fc77ad53c4ea2", 1182 "RepoDigests": [ 1183 "localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf" 1184 ], 1185 "RepoTags": [ 1186 "localhost:5000/test/busybox:latest", 1187 "playdate:latest" 1188 ], 1189 "Size": 0, 1190 "VirtualSize": 2429728 1191 } 1192 ] 1193 1194 The response shows a single image `Id` associated with two repositories 1195 (`RepoTags`): `localhost:5000/test/busybox`: and `playdate`. A caller can use 1196 either of the `RepoTags` values `localhost:5000/test/busybox:latest` or 1197 `playdate:latest` to reference the image. 1198 1199 You can also use `RepoDigests` values to reference an image. In this response, 1200 the array has only one reference and that is to the 1201 `localhost:5000/test/busybox` repository; the `playdate` repository has no 1202 digest. You can reference this digest using the value: 1203 `localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d...` 1204 1205 See the `docker run` and `docker build` commands for examples of digest and tag 1206 references on the command line. 1207 1208 Query Parameters: 1209 1210 - **all** – 1/True/true or 0/False/false, default false 1211 - **filters** – a json encoded value of the filters (a map[string][]string) to process on the images list. Available filters: 1212 - dangling=true 1213 - label=`key` or `key=value` of an image label 1214 1215 ### Build image from a Dockerfile 1216 1217 `POST /build` 1218 1219 Build an image from a Dockerfile 1220 1221 **Example request**: 1222 1223 POST /build HTTP/1.1 1224 1225 {{ TAR STREAM }} 1226 1227 **Example response**: 1228 1229 HTTP/1.1 200 OK 1230 Content-Type: application/json 1231 1232 {"stream": "Step 1..."} 1233 {"stream": "..."} 1234 {"error": "Error...", "errorDetail": {"code": 123, "message": "Error..."}} 1235 1236 The input stream must be a tar archive compressed with one of the 1237 following algorithms: identity (no compression), gzip, bzip2, xz. 1238 1239 The archive must include a build instructions file, typically called 1240 `Dockerfile` at the root of the archive. The `dockerfile` parameter may be 1241 used to specify a different build instructions file by having its value be 1242 the path to the alternate build instructions file to use. 1243 1244 The archive may include any number of other files, 1245 which will be accessible in the build context (See the [*ADD build 1246 command*](/reference/builder/#dockerbuilder)). 1247 1248 The build will also be canceled if the client drops the connection by quitting 1249 or being killed. 1250 1251 Query Parameters: 1252 1253 - **dockerfile** - path within the build context to the Dockerfile. This is 1254 ignored if `remote` is specified and points to an individual filename. 1255 - **t** – repository name (and optionally a tag) to be applied to 1256 the resulting image in case of success 1257 - **remote** – A Git repository URI or HTTP/HTTPS URI build source. If the 1258 URI specifies a filename, the file's contents are placed into a file 1259 called `Dockerfile`. 1260 - **q** – suppress verbose build output 1261 - **nocache** – do not use the cache when building the image 1262 - **pull** - attempt to pull the image even if an older image exists locally 1263 - **rm** - remove intermediate containers after a successful build (default behavior) 1264 - **forcerm** - always remove intermediate containers (includes rm) 1265 - **memory** - set memory limit for build 1266 - **memswap** - Total memory (memory + swap), `-1` to disable swap 1267 - **cpushares** - CPU shares (relative weight) 1268 - **cpusetcpus** - CPUs in which to allow execution, e.g., `0-3`, `0,1` 1269 1270 Request Headers: 1271 1272 - **Content-type** – should be set to `"application/tar"`. 1273 - **X-Registry-Config** – base64-encoded ConfigFile object 1274 1275 Status Codes: 1276 1277 - **200** – no error 1278 - **500** – server error 1279 1280 ### Create an image 1281 1282 `POST /images/create` 1283 1284 Create an image, either by pulling it from the registry or by importing it 1285 1286 **Example request**: 1287 1288 POST /images/create?fromImage=ubuntu HTTP/1.1 1289 1290 **Example response**: 1291 1292 HTTP/1.1 200 OK 1293 Content-Type: application/json 1294 1295 {"status": "Pulling..."} 1296 {"status": "Pulling", "progress": "1 B/ 100 B", "progressDetail": {"current": 1, "total": 100}} 1297 {"error": "Invalid..."} 1298 ... 1299 1300 When using this endpoint to pull an image from the registry, the 1301 `X-Registry-Auth` header can be used to include 1302 a base64-encoded AuthConfig object. 1303 1304 Query Parameters: 1305 1306 - **fromImage** – name of the image to pull 1307 - **fromSrc** – source to import. The value may be a URL from which the image 1308 can be retrieved or `-` to read the image from the request body. 1309 - **repo** – repository 1310 - **tag** – tag 1311 - **registry** – the registry to pull from 1312 1313 Request Headers: 1314 1315 - **X-Registry-Auth** – base64-encoded AuthConfig object 1316 1317 Status Codes: 1318 1319 - **200** – no error 1320 - **500** – server error 1321 1322 1323 1324 ### Inspect an image 1325 1326 `GET /images/(name)/json` 1327 1328 Return low-level information on the image `name` 1329 1330 **Example request**: 1331 1332 GET /images/ubuntu/json HTTP/1.1 1333 1334 **Example response**: 1335 1336 HTTP/1.1 200 OK 1337 Content-Type: application/json 1338 1339 { 1340 "Created": "2013-03-23T22:24:18.818426-07:00", 1341 "Container": "3d67245a8d72ecf13f33dffac9f79dcdf70f75acb84d308770391510e0c23ad0", 1342 "ContainerConfig": 1343 { 1344 "Hostname": "", 1345 "User": "", 1346 "AttachStdin": false, 1347 "AttachStdout": false, 1348 "AttachStderr": false, 1349 "PortSpecs": null, 1350 "Tty": true, 1351 "OpenStdin": true, 1352 "StdinOnce": false, 1353 "Env": null, 1354 "Cmd": ["/bin/bash"], 1355 "Dns": null, 1356 "Image": "ubuntu", 1357 "Labels": { 1358 "com.example.vendor": "Acme", 1359 "com.example.license": "GPL", 1360 "com.example.version": "1.0" 1361 }, 1362 "Volumes": null, 1363 "VolumesFrom": "", 1364 "WorkingDir": "" 1365 }, 1366 "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc", 1367 "Parent": "27cf784147099545", 1368 "Size": 6824592 1369 } 1370 1371 Status Codes: 1372 1373 - **200** – no error 1374 - **404** – no such image 1375 - **500** – server error 1376 1377 ### Get the history of an image 1378 1379 `GET /images/(name)/history` 1380 1381 Return the history of the image `name` 1382 1383 **Example request**: 1384 1385 GET /images/ubuntu/history HTTP/1.1 1386 1387 **Example response**: 1388 1389 HTTP/1.1 200 OK 1390 Content-Type: application/json 1391 1392 [ 1393 { 1394 "Id": "b750fe79269d", 1395 "Created": 1364102658, 1396 "CreatedBy": "/bin/bash" 1397 }, 1398 { 1399 "Id": "27cf78414709", 1400 "Created": 1364068391, 1401 "CreatedBy": "" 1402 } 1403 ] 1404 1405 Status Codes: 1406 1407 - **200** – no error 1408 - **404** – no such image 1409 - **500** – server error 1410 1411 ### Push an image on the registry 1412 1413 `POST /images/(name)/push` 1414 1415 Push the image `name` on the registry 1416 1417 **Example request**: 1418 1419 POST /images/test/push HTTP/1.1 1420 1421 **Example response**: 1422 1423 HTTP/1.1 200 OK 1424 Content-Type: application/json 1425 1426 {"status": "Pushing..."} 1427 {"status": "Pushing", "progress": "1/? (n/a)", "progressDetail": {"current": 1}}} 1428 {"error": "Invalid..."} 1429 ... 1430 1431 If you wish to push an image on to a private registry, that image must already have been tagged 1432 into a repository which references that registry host name and port. This repository name should 1433 then be used in the URL. This mirrors the flow of the CLI. 1434 1435 **Example request**: 1436 1437 POST /images/registry.acme.com:5000/test/push HTTP/1.1 1438 1439 1440 Query Parameters: 1441 1442 - **tag** – the tag to associate with the image on the registry, optional 1443 1444 Request Headers: 1445 1446 - **X-Registry-Auth** – include a base64-encoded AuthConfig 1447 object. 1448 1449 Status Codes: 1450 1451 - **200** – no error 1452 - **404** – no such image 1453 - **500** – server error 1454 1455 ### Tag an image into a repository 1456 1457 `POST /images/(name)/tag` 1458 1459 Tag the image `name` into a repository 1460 1461 **Example request**: 1462 1463 POST /images/test/tag?repo=myrepo&force=0&tag=v42 HTTP/1.1 1464 1465 **Example response**: 1466 1467 HTTP/1.1 201 OK 1468 1469 Query Parameters: 1470 1471 - **repo** – The repository to tag in 1472 - **force** – 1/True/true or 0/False/false, default false 1473 - **tag** - The new tag name 1474 1475 Status Codes: 1476 1477 - **201** – no error 1478 - **400** – bad parameter 1479 - **404** – no such image 1480 - **409** – conflict 1481 - **500** – server error 1482 1483 ### Remove an image 1484 1485 `DELETE /images/(name)` 1486 1487 Remove the image `name` from the filesystem 1488 1489 **Example request**: 1490 1491 DELETE /images/test HTTP/1.1 1492 1493 **Example response**: 1494 1495 HTTP/1.1 200 OK 1496 Content-type: application/json 1497 1498 [ 1499 {"Untagged": "3e2f21a89f"}, 1500 {"Deleted": "3e2f21a89f"}, 1501 {"Deleted": "53b4f83ac9"} 1502 ] 1503 1504 Query Parameters: 1505 1506 - **force** – 1/True/true or 0/False/false, default false 1507 - **noprune** – 1/True/true or 0/False/false, default false 1508 1509 Status Codes: 1510 1511 - **200** – no error 1512 - **404** – no such image 1513 - **409** – conflict 1514 - **500** – server error 1515 1516 ### Search images 1517 1518 `GET /images/search` 1519 1520 Search for an image on [Docker Hub](https://hub.docker.com). 1521 1522 > **Note**: 1523 > The response keys have changed from API v1.6 to reflect the JSON 1524 > sent by the registry server to the docker daemon's request. 1525 1526 **Example request**: 1527 1528 GET /images/search?term=sshd HTTP/1.1 1529 1530 **Example response**: 1531 1532 HTTP/1.1 200 OK 1533 Content-Type: application/json 1534 1535 [ 1536 { 1537 "description": "", 1538 "is_official": false, 1539 "is_automated": false, 1540 "name": "wma55/u1210sshd", 1541 "star_count": 0 1542 }, 1543 { 1544 "description": "", 1545 "is_official": false, 1546 "is_automated": false, 1547 "name": "jdswinbank/sshd", 1548 "star_count": 0 1549 }, 1550 { 1551 "description": "", 1552 "is_official": false, 1553 "is_automated": false, 1554 "name": "vgauthier/sshd", 1555 "star_count": 0 1556 } 1557 ... 1558 ] 1559 1560 Query Parameters: 1561 1562 - **term** – term to search 1563 1564 Status Codes: 1565 1566 - **200** – no error 1567 - **500** – server error 1568 1569 ## 2.3 Misc 1570 1571 ### Check auth configuration 1572 1573 `POST /auth` 1574 1575 Get the default username and email 1576 1577 **Example request**: 1578 1579 POST /auth HTTP/1.1 1580 Content-Type: application/json 1581 1582 { 1583 "username":" hannibal", 1584 "password: "xxxx", 1585 "email": "hannibal@a-team.com", 1586 "serveraddress": "https://index.docker.io/v1/" 1587 } 1588 1589 **Example response**: 1590 1591 HTTP/1.1 200 OK 1592 1593 Status Codes: 1594 1595 - **200** – no error 1596 - **204** – no error 1597 - **500** – server error 1598 1599 ### Display system-wide information 1600 1601 `GET /info` 1602 1603 Display system-wide information 1604 1605 **Example request**: 1606 1607 GET /info HTTP/1.1 1608 1609 **Example response**: 1610 1611 HTTP/1.1 200 OK 1612 Content-Type: application/json 1613 1614 { 1615 "Containers":11, 1616 "Images":16, 1617 "Driver":"btrfs", 1618 "DriverStatus": [[""]], 1619 "ExecutionDriver":"native-0.1", 1620 "KernelVersion":"3.12.0-1-amd64" 1621 "NCPU":1, 1622 "MemTotal":2099236864, 1623 "Name":"prod-server-42", 1624 "ID":"7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS", 1625 "Debug":false, 1626 "NFd": 11, 1627 "NGoroutines":21, 1628 "SystemTime": "2015-03-10T11:11:23.730591467-07:00" 1629 "NEventsListener":0, 1630 "InitPath":"/usr/bin/docker", 1631 "InitSha1":"", 1632 "IndexServerAddress":["https://index.docker.io/v1/"], 1633 "MemoryLimit":true, 1634 "SwapLimit":false, 1635 "IPv4Forwarding":true, 1636 "Labels":["storage=ssd"], 1637 "DockerRootDir": "/var/lib/docker", 1638 "HttpProxy": "http://test:test@localhost:8080" 1639 "HttpsProxy": "https://test:test@localhost:8080" 1640 "NoProxy": "9.81.1.160" 1641 "OperatingSystem": "Boot2Docker", 1642 } 1643 1644 Status Codes: 1645 1646 - **200** – no error 1647 - **500** – server error 1648 1649 ### Show the docker version information 1650 1651 `GET /version` 1652 1653 Show the docker version information 1654 1655 **Example request**: 1656 1657 GET /version HTTP/1.1 1658 1659 **Example response**: 1660 1661 HTTP/1.1 200 OK 1662 Content-Type: application/json 1663 1664 { 1665 "Version": "1.5.0", 1666 "Os": "linux", 1667 "KernelVersion": "3.18.5-tinycore64", 1668 "GoVersion": "go1.4.1", 1669 "GitCommit": "a8a31ef", 1670 "Arch": "amd64", 1671 "ApiVersion": "1.19" 1672 } 1673 1674 Status Codes: 1675 1676 - **200** – no error 1677 - **500** – server error 1678 1679 ### Ping the docker server 1680 1681 `GET /_ping` 1682 1683 Ping the docker server 1684 1685 **Example request**: 1686 1687 GET /_ping HTTP/1.1 1688 1689 **Example response**: 1690 1691 HTTP/1.1 200 OK 1692 Content-Type: text/plain 1693 1694 OK 1695 1696 Status Codes: 1697 1698 - **200** - no error 1699 - **500** - server error 1700 1701 ### Create a new image from a container's changes 1702 1703 `POST /commit` 1704 1705 Create a new image from a container's changes 1706 1707 **Example request**: 1708 1709 POST /commit?container=44c004db4b17&comment=message&repo=myrepo HTTP/1.1 1710 Content-Type: application/json 1711 1712 { 1713 "Hostname": "", 1714 "Domainname": "", 1715 "User": "", 1716 "AttachStdin": false, 1717 "AttachStdout": true, 1718 "AttachStderr": true, 1719 "PortSpecs": null, 1720 "Tty": false, 1721 "OpenStdin": false, 1722 "StdinOnce": false, 1723 "Env": null, 1724 "Cmd": [ 1725 "date" 1726 ], 1727 "Volumes": { 1728 "/tmp": {} 1729 }, 1730 "WorkingDir": "", 1731 "NetworkDisabled": false, 1732 "ExposedPorts": { 1733 "22/tcp": {} 1734 } 1735 } 1736 1737 **Example response**: 1738 1739 HTTP/1.1 201 Created 1740 Content-Type: application/vnd.docker.raw-stream 1741 1742 {"Id": "596069db4bf5"} 1743 1744 Json Parameters: 1745 1746 - **config** - the container's configuration 1747 1748 Query Parameters: 1749 1750 - **container** – source container 1751 - **repo** – repository 1752 - **tag** – tag 1753 - **comment** – commit message 1754 - **author** – author (e.g., "John Hannibal Smith 1755 <[hannibal@a-team.com](mailto:hannibal%40a-team.com)>") 1756 1757 Status Codes: 1758 1759 - **201** – no error 1760 - **404** – no such container 1761 - **500** – server error 1762 1763 ### Monitor Docker's events 1764 1765 `GET /events` 1766 1767 Get container events from docker, either in real time via streaming, or via 1768 polling (using since). 1769 1770 Docker containers will report the following events: 1771 1772 create, destroy, die, exec_create, exec_start, export, kill, oom, pause, restart, start, stop, unpause 1773 1774 and Docker images will report: 1775 1776 untag, delete 1777 1778 **Example request**: 1779 1780 GET /events?since=1374067924 1781 1782 **Example response**: 1783 1784 HTTP/1.1 200 OK 1785 Content-Type: application/json 1786 1787 {"status": "create", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067924} 1788 {"status": "start", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067924} 1789 {"status": "stop", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067966} 1790 {"status": "destroy", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067970} 1791 1792 Query Parameters: 1793 1794 - **since** – timestamp used for polling 1795 - **until** – timestamp used for polling 1796 - **filters** – a json encoded value of the filters (a map[string][]string) to process on the event list. Available filters: 1797 - event=<string> -- event to filter 1798 - image=<string> -- image to filter 1799 - container=<string> -- container to filter 1800 1801 Status Codes: 1802 1803 - **200** – no error 1804 - **500** – server error 1805 1806 ### Get a tarball containing all images in a repository 1807 1808 `GET /images/(name)/get` 1809 1810 Get a tarball containing all images and metadata for the repository specified 1811 by `name`. 1812 1813 If `name` is a specific name and tag (e.g. ubuntu:latest), then only that image 1814 (and its parents) are returned. If `name` is an image ID, similarly only that 1815 image (and its parents) are returned, but with the exclusion of the 1816 'repositories' file in the tarball, as there were no image names referenced. 1817 1818 See the [image tarball format](#image-tarball-format) for more details. 1819 1820 **Example request** 1821 1822 GET /images/ubuntu/get 1823 1824 **Example response**: 1825 1826 HTTP/1.1 200 OK 1827 Content-Type: application/x-tar 1828 1829 Binary data stream 1830 1831 Status Codes: 1832 1833 - **200** – no error 1834 - **500** – server error 1835 1836 ### Get a tarball containing all images. 1837 1838 `GET /images/get` 1839 1840 Get a tarball containing all images and metadata for one or more repositories. 1841 1842 For each value of the `names` parameter: if it is a specific name and tag (e.g. 1843 ubuntu:latest), then only that image (and its parents) are returned; if it is 1844 an image ID, similarly only that image (and its parents) are returned and there 1845 would be no names referenced in the 'repositories' file for this image ID. 1846 1847 See the [image tarball format](#image-tarball-format) for more details. 1848 1849 **Example request** 1850 1851 GET /images/get?names=myname%2Fmyapp%3Alatest&names=busybox 1852 1853 **Example response**: 1854 1855 HTTP/1.1 200 OK 1856 Content-Type: application/x-tar 1857 1858 Binary data stream 1859 1860 Status Codes: 1861 1862 - **200** – no error 1863 - **500** – server error 1864 1865 ### Load a tarball with a set of images and tags into docker 1866 1867 `POST /images/load` 1868 1869 Load a set of images and tags into the docker repository. 1870 See the [image tarball format](#image-tarball-format) for more details. 1871 1872 **Example request** 1873 1874 POST /images/load 1875 1876 Tarball in body 1877 1878 **Example response**: 1879 1880 HTTP/1.1 200 OK 1881 1882 Status Codes: 1883 1884 - **200** – no error 1885 - **500** – server error 1886 1887 ### Image tarball format 1888 1889 An image tarball contains one directory per image layer (named using its long ID), 1890 each containing three files: 1891 1892 1. `VERSION`: currently `1.0` - the file format version 1893 2. `json`: detailed layer information, similar to `docker inspect layer_id` 1894 3. `layer.tar`: A tarfile containing the filesystem changes in this layer 1895 1896 The `layer.tar` file will contain `aufs` style `.wh..wh.aufs` files and directories 1897 for storing attribute changes and deletions. 1898 1899 If the tarball defines a repository, there will also be a `repositories` file at 1900 the root that contains a list of repository and tag names mapped to layer IDs. 1901 1902 ``` 1903 {"hello-world": 1904 {"latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1"} 1905 } 1906 ``` 1907 1908 ### Exec Create 1909 1910 `POST /containers/(id)/exec` 1911 1912 Sets up an exec instance in a running container `id` 1913 1914 **Example request**: 1915 1916 POST /containers/e90e34656806/exec HTTP/1.1 1917 Content-Type: application/json 1918 1919 { 1920 "AttachStdin": false, 1921 "AttachStdout": true, 1922 "AttachStderr": true, 1923 "Tty": false, 1924 "Cmd": [ 1925 "date" 1926 ], 1927 } 1928 1929 **Example response**: 1930 1931 HTTP/1.1 201 OK 1932 Content-Type: application/json 1933 1934 { 1935 "Id": "f90e34656806" 1936 "Warnings":[] 1937 } 1938 1939 Json Parameters: 1940 1941 - **AttachStdin** - Boolean value, attaches to stdin of the exec command. 1942 - **AttachStdout** - Boolean value, attaches to stdout of the exec command. 1943 - **AttachStderr** - Boolean value, attaches to stderr of the exec command. 1944 - **Tty** - Boolean value to allocate a pseudo-TTY 1945 - **Cmd** - Command to run specified as a string or an array of strings. 1946 1947 1948 Status Codes: 1949 1950 - **201** – no error 1951 - **404** – no such container 1952 1953 ### Exec Start 1954 1955 `POST /exec/(id)/start` 1956 1957 Starts a previously set up exec instance `id`. If `detach` is true, this API 1958 returns after starting the `exec` command. Otherwise, this API sets up an 1959 interactive session with the `exec` command. 1960 1961 **Example request**: 1962 1963 POST /exec/e90e34656806/start HTTP/1.1 1964 Content-Type: application/json 1965 1966 { 1967 "Detach": false, 1968 "Tty": false, 1969 } 1970 1971 **Example response**: 1972 1973 HTTP/1.1 201 OK 1974 Content-Type: application/json 1975 1976 {{ STREAM }} 1977 1978 Json Parameters: 1979 1980 - **Detach** - Detach from the exec command 1981 - **Tty** - Boolean value to allocate a pseudo-TTY 1982 1983 Status Codes: 1984 1985 - **201** – no error 1986 - **404** – no such exec instance 1987 1988 **Stream details**: 1989 Similar to the stream behavior of `POST /container/(id)/attach` API 1990 1991 ### Exec Resize 1992 1993 `POST /exec/(id)/resize` 1994 1995 Resizes the tty session used by the exec command `id`. 1996 This API is valid only if `tty` was specified as part of creating and starting the exec command. 1997 1998 **Example request**: 1999 2000 POST /exec/e90e34656806/resize HTTP/1.1 2001 Content-Type: text/plain 2002 2003 **Example response**: 2004 2005 HTTP/1.1 201 OK 2006 Content-Type: text/plain 2007 2008 Query Parameters: 2009 2010 - **h** – height of tty session 2011 - **w** – width 2012 2013 Status Codes: 2014 2015 - **201** – no error 2016 - **404** – no such exec instance 2017 2018 ### Exec Inspect 2019 2020 `GET /exec/(id)/json` 2021 2022 Return low-level information about the exec command `id`. 2023 2024 **Example request**: 2025 2026 GET /exec/11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39/json HTTP/1.1 2027 2028 **Example response**: 2029 2030 HTTP/1.1 200 OK 2031 Content-Type: plain/text 2032 2033 { 2034 "ID" : "11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39", 2035 "Running" : false, 2036 "ExitCode" : 2, 2037 "ProcessConfig" : { 2038 "privileged" : false, 2039 "user" : "", 2040 "tty" : false, 2041 "entrypoint" : "sh", 2042 "arguments" : [ 2043 "-c", 2044 "exit 2" 2045 ] 2046 }, 2047 "OpenStdin" : false, 2048 "OpenStderr" : false, 2049 "OpenStdout" : false, 2050 "Container" : { 2051 "State" : { 2052 "Running" : true, 2053 "Paused" : false, 2054 "Restarting" : false, 2055 "OOMKilled" : false, 2056 "Pid" : 3650, 2057 "ExitCode" : 0, 2058 "Error" : "", 2059 "StartedAt" : "2014-11-17T22:26:03.717657531Z", 2060 "FinishedAt" : "0001-01-01T00:00:00Z" 2061 }, 2062 "ID" : "8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c", 2063 "Created" : "2014-11-17T22:26:03.626304998Z", 2064 "Path" : "date", 2065 "Args" : [], 2066 "Config" : { 2067 "Hostname" : "8f177a186b97", 2068 "Domainname" : "", 2069 "User" : "", 2070 "AttachStdin" : false, 2071 "AttachStdout" : false, 2072 "AttachStderr" : false, 2073 "PortSpecs" : null, 2074 "ExposedPorts" : null, 2075 "Tty" : false, 2076 "OpenStdin" : false, 2077 "StdinOnce" : false, 2078 "Env" : [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], 2079 "Cmd" : [ 2080 "date" 2081 ], 2082 "Image" : "ubuntu", 2083 "Volumes" : null, 2084 "WorkingDir" : "", 2085 "Entrypoint" : null, 2086 "NetworkDisabled" : false, 2087 "MacAddress" : "", 2088 "OnBuild" : null, 2089 "SecurityOpt" : null 2090 }, 2091 "Image" : "5506de2b643be1e6febbf3b8a240760c6843244c41e12aa2f60ccbb7153d17f5", 2092 "NetworkSettings" : { 2093 "IPAddress" : "172.17.0.2", 2094 "IPPrefixLen" : 16, 2095 "MacAddress" : "02:42:ac:11:00:02", 2096 "Gateway" : "172.17.42.1", 2097 "Bridge" : "docker0", 2098 "PortMapping" : null, 2099 "Ports" : {} 2100 }, 2101 "ResolvConfPath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/resolv.conf", 2102 "HostnamePath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/hostname", 2103 "HostsPath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/hosts", 2104 "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", 2105 "Name" : "/test", 2106 "Driver" : "aufs", 2107 "ExecDriver" : "native-0.2", 2108 "MountLabel" : "", 2109 "ProcessLabel" : "", 2110 "AppArmorProfile" : "", 2111 "RestartCount" : 0, 2112 "Volumes" : {}, 2113 "VolumesRW" : {} 2114 } 2115 } 2116 2117 Status Codes: 2118 2119 - **200** – no error 2120 - **404** – no such exec instance 2121 - **500** - server error 2122 2123 # 3. Going further 2124 2125 ## 3.1 Inside `docker run` 2126 2127 As an example, the `docker run` command line makes the following API calls: 2128 2129 - Create the container 2130 2131 - If the status code is 404, it means the image doesn't exist: 2132 - Try to pull it 2133 - Then retry to create the container 2134 2135 - Start the container 2136 2137 - If you are not in detached mode: 2138 - Attach to the container, using logs=1 (to have stdout and 2139 stderr from the container's start) and stream=1 2140 2141 - If in detached mode or only stdin is attached: 2142 - Display the container's id 2143 2144 ## 3.2 Hijacking 2145 2146 In this version of the API, /attach, uses hijacking to transport stdin, 2147 stdout and stderr on the same socket. 2148 2149 To hint potential proxies about connection hijacking, Docker client sends 2150 connection upgrade headers similarly to websocket. 2151 2152 Upgrade: tcp 2153 Connection: Upgrade 2154 2155 When Docker daemon detects the `Upgrade` header, it will switch its status code 2156 from **200 OK** to **101 UPGRADED** and resend the same headers. 2157 2158 This might change in the future. 2159 2160 ## 3.3 CORS Requests 2161 2162 To set cross origin requests to the remote api please give values to 2163 "--api-cors-header" when running docker in daemon mode. Set * will allow all, 2164 default or blank means CORS disabled 2165 2166 $ docker -d -H="192.168.1.9:2375" --api-cors-header="http://foo.bar"