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