github.com/feiyang21687/docker@v1.5.0/docs/sources/reference/api/docker_remote_api_v1.6.md (about) 1 page_title: Remote API v1.6 2 page_description: API Documentation for Docker 3 page_keywords: API, Docker, rcli, REST, documentation 4 5 # Docker Remote API v1.6 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 bind 11 Docker to another host/port or a Unix socket. 12 - The API tends to be REST, but for some complex commands, like `attach` 13 or `pull`, the HTTP connection is hijacked to transport `stdout, stdin` 14 and `stderr` 15 16 # 2. Endpoints 17 18 ## 2.1 Containers 19 20 ### List containers 21 22 `GET /containers/json` 23 24 List containers 25 26 **Example request**: 27 28 GET /containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1 29 30 **Example response**: 31 32 HTTP/1.1 200 OK 33 Content-Type: application/json 34 35 [ 36 { 37 "Id": "8dfafdbc3a40", 38 "Image": "base:latest", 39 "Command": "echo 1", 40 "Created": 1367854155, 41 "Status": "Exit 0", 42 "Ports": [{"PrivatePort": 2222, "PublicPort": 3333, "Type": "tcp"}], 43 "SizeRw": 12288, 44 "SizeRootFs": 0 45 }, 46 { 47 "Id": "9cd87474be90", 48 "Image": "base:latest", 49 "Command": "echo 222222", 50 "Created": 1367854155, 51 "Status": "Exit 0", 52 "Ports": [], 53 "SizeRw": 12288, 54 "SizeRootFs": 0 55 }, 56 { 57 "Id": "3176a2479c92", 58 "Image": "base:latest", 59 "Command": "echo 3333333333333333", 60 "Created": 1367854154, 61 "Status": "Exit 0", 62 "Ports":[], 63 "SizeRw":12288, 64 "SizeRootFs":0 65 }, 66 { 67 "Id": "4cb07b47f9fb", 68 "Image": "base:latest", 69 "Command": "echo 444444444444444444444444444444444", 70 "Created": 1367854152, 71 "Status": "Exit 0", 72 "Ports": [], 73 "SizeRw": 12288, 74 "SizeRootFs": 0 75 } 76 ] 77 78 Query Parameters: 79 80 81 82 - **all** – 1/True/true or 0/False/false, Show all containers. 83 Only running containers are shown by default (i.e., this defaults to false) 84 - **limit** – Show `limit` last created containers, include non-running ones. 85 - **since** – Show only containers created since Id, include non-running ones. 86 - **before** – Show only containers created before Id, include non-running ones. 87 - **size** – 1/True/true or 0/False/false, Show the containers sizes 88 89 Status Codes: 90 91 - **200** – no error 92 - **400** – bad parameter 93 - **500** – server error 94 95 ### Create a container 96 97 `POST /containers/create` 98 99 Create a container 100 101 **Example request**: 102 103 POST /containers/create HTTP/1.1 104 Content-Type: application/json 105 106 { 107 "Hostname":"", 108 "User":"", 109 "Memory":0, 110 "MemorySwap":0, 111 "AttachStdin":false, 112 "AttachStdout":true, 113 "AttachStderr":true, 114 "ExposedPorts":{}, 115 "Tty":false, 116 "OpenStdin":false, 117 "StdinOnce":false, 118 "Env":null, 119 "Cmd":[ 120 "date" 121 ], 122 "Dns":null, 123 "Image":"base", 124 "Volumes":{}, 125 "VolumesFrom":"", 126 "WorkingDir":"" 127 } 128 129 **Example response**: 130 131 HTTP/1.1 201 Created 132 Content-Type: application/json 133 134 { 135 "Id":"e90e34656806" 136 "Warnings":[] 137 } 138 139 Json Parameters: 140 141 - **config** – the container's configuration 142 143 Query Parameters: 144 145 146 147 - **name** – container name to use 148 149 Status Codes: 150 151 - **201** – no error 152 - **404** – no such container 153 - **406** – impossible to attach (container not running) 154 - **500** – server error 155 156 **More Complex Example request, in 2 steps.** **First, use create to 157 expose a Private Port, which can be bound back to a Public Port a 158 startup**: 159 160 POST /containers/create HTTP/1.1 161 Content-Type: application/json 162 163 { 164 "Cmd":[ 165 "/usr/sbin/sshd","-D" 166 ], 167 "Image":"image-with-sshd", 168 "ExposedPorts":{"22/tcp":{}} 169 } 170 171 **Example response**: 172 173 HTTP/1.1 201 OK 174 Content-Type: application/json 175 176 { 177 "Id":"e90e34656806" 178 "Warnings":[] 179 } 180 181 **Second, start (using the ID returned above) the image we jus 182 created, mapping the ssh port 22 to something on the host**: 183 184 POST /containers/e90e34656806/start HTTP/1.1 185 Content-Type: application/json 186 187 { 188 "PortBindings": { "22/tcp": [{ "HostPort": "11022" }]} 189 } 190 191 **Example response**: 192 193 HTTP/1.1 204 No Conten 194 Content-Type: text/plain; charset=utf-8 195 Content-Length: 0 196 197 **Now you can ssh into your new container on port 11022.** 198 199 ### Inspect a container 200 201 `GET /containers/(id)/json` 202 203 Return low-level information on the container `id` 204 205 206 **Example request**: 207 208 GET /containers/4fa6e0f0c678/json HTTP/1.1 209 210 **Example response**: 211 212 HTTP/1.1 200 OK 213 Content-Type: application/json 214 215 { 216 "Id": "4fa6e0f0c6786287e131c3852c58a2e01cc697a68231826813597e4994f1d6e2", 217 "Created": "2013-05-07T14:51:42.041847+02:00", 218 "Path": "date", 219 "Args": [], 220 "Config": { 221 "Hostname": "4fa6e0f0c678", 222 "User": "", 223 "Memory": 0, 224 "MemorySwap": 0, 225 "AttachStdin": false, 226 "AttachStdout": true, 227 "AttachStderr": true, 228 "ExposedPorts": {}, 229 "Tty": false, 230 "OpenStdin": false, 231 "StdinOnce": false, 232 "Env": null, 233 "Cmd": [ 234 "date" 235 ], 236 "Dns": null, 237 "Image": "base", 238 "Volumes": {}, 239 "VolumesFrom": "", 240 "WorkingDir": "" 241 }, 242 "State": { 243 "Running": false, 244 "Pid": 0, 245 "ExitCode": 0, 246 "StartedAt": "2013-05-07T14:51:42.087658+02:01360", 247 "Ghost": false 248 }, 249 "Image": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc", 250 "NetworkSettings": { 251 "IpAddress": "", 252 "IpPrefixLen": 0, 253 "Gateway": "", 254 "Bridge": "", 255 "PortMapping": null 256 }, 257 "SysInitPath": "/home/kitty/go/src/github.com/docker/docker/bin/docker", 258 "ResolvConfPath": "/etc/resolv.conf", 259 "Volumes": {} 260 } 261 262 Status Codes: 263 264 - **200** – no error 265 - **404** – no such container 266 - **500** – server error 267 268 ### List processes running inside a container 269 270 `GET /containers/(id)/top` 271 272 List processes running inside the container `id` 273 274 **Example request**: 275 276 GET /containers/4fa6e0f0c678/top HTTP/1.1 277 278 **Example response**: 279 280 HTTP/1.1 200 OK 281 Content-Type: application/json 282 283 { 284 "Titles": [ 285 "USER", 286 "PID", 287 "%CPU", 288 "%MEM", 289 "VSZ", 290 "RSS", 291 "TTY", 292 "STAT", 293 "START", 294 "TIME", 295 "COMMAND" 296 ], 297 "Processes": [ 298 ["root","20147","0.0","0.1","18060","1864","pts/4","S","10:06","0:00","bash"], 299 ["root","20271","0.0","0.0","4312","352","pts/4","S+","10:07","0:00","sleep","10"] 300 ] 301 } 302 303 Query Parameters: 304 305 - **ps_args** – ps arguments to use (e.g., aux) 306 307 Status Codes: 308 309 - **200** – no error 310 - **404** – no such container 311 - **500** – server error 312 313 ### Inspect changes on a container's filesystem 314 315 `GET /containers/(id)/changes` 316 317 Inspect changes on container `id`'s filesystem 318 319 **Example request**: 320 321 GET /containers/4fa6e0f0c678/changes HTTP/1.1 322 323 **Example response**: 324 325 HTTP/1.1 200 OK 326 Content-Type: application/json 327 328 [ 329 { 330 "Path": "/dev", 331 "Kind": 0 332 }, 333 { 334 "Path": "/dev/kmsg", 335 "Kind": 1 336 }, 337 { 338 "Path": "/test", 339 "Kind": 1 340 } 341 ] 342 343 Status Codes: 344 345 - **200** – no error 346 - **404** – no such container 347 - **500** – server error 348 349 ### Export a container 350 351 `GET /containers/(id)/export` 352 353 Export the contents of container `id` 354 355 **Example request**: 356 357 GET /containers/4fa6e0f0c678/export HTTP/1.1 358 359 **Example response**: 360 361 HTTP/1.1 200 OK 362 Content-Type: application/octet-stream 363 364 {{ TAR STREAM }} 365 366 Status Codes: 367 368 - **200** – no error 369 - **404** – no such container 370 - **500** – server error 371 372 ### Start a container 373 374 `POST /containers/(id)/start` 375 376 Start the container `id` 377 378 **Example request**: 379 380 POST /containers/(id)/start HTTP/1.1 381 Content-Type: application/json 382 383 { 384 "Binds":["/tmp:/tmp"], 385 "LxcConf":[{"Key":"lxc.utsname","Value":"docker"}], 386 "ContainerIDFile": "", 387 "Privileged": false, 388 "PortBindings": {"22/tcp": [{HostIp:"", HostPort:""}]}, 389 "Links": [], 390 "PublishAllPorts": false 391 } 392 393 **Example response**: 394 395 HTTP/1.1 204 No Content 396 Content-Type: text/plain 397 398 Json Parameters: 399 400 401 402 - **hostConfig** – the container's host configuration (optional) 403 404 Status Codes: 405 406 - **204** – no error 407 - **404** – no such container 408 - **500** – server error 409 410 ### Stop a container 411 412 `POST /containers/(id)/stop` 413 414 Stop the container `id` 415 416 **Example request**: 417 418 POST /containers/e90e34656806/stop?t=5 HTTP/1.1 419 420 **Example response**: 421 422 HTTP/1.1 204 OK 423 424 Query Parameters: 425 426 - **t** – number of seconds to wait before killing the container 427 428 Status Codes: 429 430 - **204** – no error 431 - **404** – no such container 432 - **500** – server error 433 434 ### Restart a container 435 436 `POST /containers/(id)/restart` 437 438 Restart the container `id` 439 440 **Example request**: 441 442 POST /containers/e90e34656806/restart?t=5 HTTP/1.1 443 444 **Example response**: 445 446 HTTP/1.1 204 No Content 447 448 Query Parameters: 449 450 - **t** – number of seconds to wait before killing the container 451 452 Status Codes: 453 454 - **204** – no error 455 - **404** – no such container 456 - **500** – server error 457 458 ### Kill a container 459 460 `POST /containers/(id)/kill` 461 462 Kill the container `id` 463 464 **Example request**: 465 466 POST /containers/e90e34656806/kill HTTP/1.1 467 468 **Example response**: 469 470 HTTP/1.1 204 No Content 471 472 Query Parameters: 473 474 475 476 - **signal** – Signal to send to the container (integer). When no 477 set, SIGKILL is assumed and the call will waits for the 478 container to exit. 479 480 Status Codes: 481 482 - **204** – no error 483 - **404** – no such container 484 - **500** – server error 485 486 ### Attach to a container 487 488 `POST /containers/(id)/attach` 489 490 Attach to the container `id` 491 492 **Example request**: 493 494 POST /containers/16253994b7c4/attach?logs=1&stream=0&stdout=1 HTTP/1.1 495 496 **Example response**: 497 498 HTTP/1.1 200 OK 499 Content-Type: application/vnd.docker.raw-stream 500 501 {{ STREAM }} 502 503 Query Parameters: 504 505 - **logs** – 1/True/true or 0/False/false, return logs. Defaul 506 false 507 - **stream** – 1/True/true or 0/False/false, return stream. 508 Default false 509 - **stdin** – 1/True/true or 0/False/false, if stream=true, attach 510 to stdin. Default false 511 - **stdout** – 1/True/true or 0/False/false, if logs=true, return 512 stdout log, if stream=true, attach to stdout. Default false 513 - **stderr** – 1/True/true or 0/False/false, if logs=true, return 514 stderr log, if stream=true, attach to stderr. Default false 515 516 Status Codes: 517 518 - **200** – no error 519 - **400** – bad parameter 520 - **404** – no such container 521 - **500** – server error 522 523 **Stream details**: 524 525 When using the TTY setting is enabled in 526 [`POST /containers/create` 527 ](/reference/api/docker_remote_api_v1.9/#create-a-container "POST /containers/create"), 528 the stream is the raw data from the process PTY and client's stdin. 529 When the TTY is disabled, then the stream is multiplexed to separate 530 stdout and stderr. 531 532 The format is a **Header** and a **Payload** (frame). 533 534 **HEADER** 535 536 The header will contain the information on which stream write the 537 stream (stdout or stderr). It also contain the size of the 538 associated frame encoded on the last 4 bytes (uint32). 539 540 It is encoded on the first 8 bytes like this: 541 542 header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4} 543 544 `STREAM_TYPE` can be: 545 546 - 0: stdin (will be written on stdout) 547 - 1: stdout 548 - 2: stderr 549 550 `SIZE1, SIZE2, SIZE3, SIZE4` are the 4 bytes of 551 the uint32 size encoded as big endian. 552 553 **PAYLOAD** 554 555 The payload is the raw stream. 556 557 **IMPLEMENTATION** 558 559 The simplest way to implement the Attach protocol is the following: 560 561 1. Read 8 bytes 562 2. chose stdout or stderr depending on the first byte 563 3. Extract the frame size from the last 4 byets 564 4. Read the extracted size and output it on the correct output 565 5. Goto 1) 566 567 ### Attach to a container (websocket) 568 569 `GET /containers/(id)/attach/ws` 570 571 Attach to the container `id` via websocket 572 573 Implements websocket protocol handshake according to [RFC 6455](http://tools.ietf.org/html/rfc6455) 574 575 **Example request** 576 577 GET /containers/e90e34656806/attach/ws?logs=0&stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1 578 579 **Example response** 580 581 {{ STREAM }} 582 583 Query Parameters: 584 585 - **logs** – 1/True/true or 0/False/false, return logs. Default false 586 - **stream** – 1/True/true or 0/False/false, return stream. 587 Default false 588 - **stdin** – 1/True/true or 0/False/false, if stream=true, attach 589 to stdin. Default false 590 - **stdout** – 1/True/true or 0/False/false, if logs=true, return 591 stdout log, if stream=true, attach to stdout. Default false 592 - **stderr** – 1/True/true or 0/False/false, if logs=true, return 593 stderr log, if stream=true, attach to stderr. Default false 594 595 Status Codes: 596 597 - **200** – no error 598 - **400** – bad parameter 599 - **404** – no such container 600 - **500** – server error 601 602 ### Wait a container 603 604 `POST /containers/(id)/wait` 605 606 Block until container `id` stops, then returns the exit code 607 608 **Example request**: 609 610 POST /containers/16253994b7c4/wait HTTP/1.1 611 612 **Example response**: 613 614 HTTP/1.1 200 OK 615 Content-Type: application/json 616 617 {"StatusCode": 0} 618 619 Status Codes: 620 621 - **200** – no error 622 - **404** – no such container 623 - **500** – server error 624 625 ### Remove a container 626 627 `DELETE /containers/(id)` 628 629 Remove the container `id` from the filesystem 630 631 **Example request**: 632 633 DELETE /containers/16253994b7c4?v=1 HTTP/1.1 634 635 **Example response**: 636 637 HTTP/1.1 204 No Content 638 639 Query Parameters: 640 641 - **v** – 1/True/true or 0/False/false, Remove the volumes 642 associated to the container. Default false 643 644 Status Codes: 645 646 - **204** – no error 647 - **400** – bad parameter 648 - **404** – no such container 649 - **500** – server error 650 651 ### Copy files or folders from a container 652 653 `POST /containers/(id)/copy` 654 655 Copy files or folders of container `id` 656 657 **Example request**: 658 659 POST /containers/4fa6e0f0c678/copy HTTP/1.1 660 Content-Type: application/json 661 662 { 663 "Resource": "test.txt" 664 } 665 666 **Example response**: 667 668 HTTP/1.1 200 OK 669 Content-Type: application/octet-stream 670 671 {{ TAR STREAM }} 672 673 Status Codes: 674 675 - **200** – no error 676 - **404** – no such container 677 - **500** – server error 678 679 ## 2.2 Images 680 681 ### List Images 682 683 `GET /images/(format)` 684 685 List images `format` could be json or viz (json default) 686 687 **Example request**: 688 689 GET /images/json?all=0 HTTP/1.1 690 691 **Example response**: 692 693 HTTP/1.1 200 OK 694 Content-Type: application/json 695 696 [ 697 { 698 "Repository":"base", 699 "Tag":"ubuntu-12.10", 700 "Id":"b750fe79269d", 701 "Created":1364102658, 702 "Size":24653, 703 "VirtualSize":180116135 704 }, 705 { 706 "Repository":"base", 707 "Tag":"ubuntu-quantal", 708 "Id":"b750fe79269d", 709 "Created":1364102658, 710 "Size":24653, 711 "VirtualSize":180116135 712 } 713 ] 714 715 **Example request**: 716 717 GET /images/viz HTTP/1.1 718 719 **Example response**: 720 721 HTTP/1.1 200 OK 722 Content-Type: text/plain 723 724 digraph docker { 725 "d82cbacda43a" -> "074be284591f" 726 "1496068ca813" -> "08306dc45919" 727 "08306dc45919" -> "0e7893146ac2" 728 "b750fe79269d" -> "1496068ca813" 729 base -> "27cf78414709" [style=invis] 730 "f71189fff3de" -> "9a33b36209ed" 731 "27cf78414709" -> "b750fe79269d" 732 "0e7893146ac2" -> "d6434d954665" 733 "d6434d954665" -> "d82cbacda43a" 734 base -> "e9aa60c60128" [style=invis] 735 "074be284591f" -> "f71189fff3de" 736 "b750fe79269d" [label="b750fe79269d\nbase",shape=box,fillcolor="paleturquoise",style="filled,rounded"]; 737 "e9aa60c60128" [label="e9aa60c60128\nbase2",shape=box,fillcolor="paleturquoise",style="filled,rounded"]; 738 "9a33b36209ed" [label="9a33b36209ed\ntest",shape=box,fillcolor="paleturquoise",style="filled,rounded"]; 739 base [style=invisible] 740 } 741 742 Query Parameters: 743 744 - **all** – 1/True/true or 0/False/false, Show all containers. 745 Only running containers are shown by defaul 746 747 Status Codes: 748 749 - **200** – no error 750 - **400** – bad parameter 751 - **500** – server error 752 753 ### Create an image 754 755 `POST /images/create` 756 757 Create an image, either by pull it from the registry or by importing i 758 759 **Example request**: 760 761 POST /images/create?fromImage=base HTTP/1.1 762 763 **Example response**: 764 765 HTTP/1.1 200 OK 766 Content-Type: application/json 767 768 {"status":"Pulling..."} 769 {"status":"Pulling", "progress":"1/? (n/a)"} 770 {"error":"Invalid..."} 771 ... 772 773 When using this endpoint to pull an image from the registry, the 774 `X-Registry-Auth` header can be used to include 775 a base64-encoded AuthConfig object. 776 777 Query Parameters: 778 779 - **fromImage** – name of the image to pull 780 - **fromSrc** – source to import, - means stdin 781 - **repo** – repository 782 - **tag** – tag 783 - **registry** – the registry to pull from 784 785 Status Codes: 786 787 - **200** – no error 788 - **500** – server error 789 790 ### Insert a file in an image 791 792 `POST /images/(name)/insert` 793 794 Insert a file from `url` in the image `name` at `path` 795 796 **Example request**: 797 798 POST /images/test/insert?path=/usr&url=myurl HTTP/1.1 799 800 **Example response**: 801 802 HTTP/1.1 200 OK 803 Content-Type: application/json 804 805 {"status":"Inserting..."} 806 {"status":"Inserting", "progress":"1/? (n/a)"} 807 {"error":"Invalid..."} 808 ... 809 810 Query Parameters: 811 812 - **url** – The url from where the file is taken 813 - **path** – The path where the file is stored 814 815 Status Codes: 816 817 - **200** – no error 818 - **500** – server error 819 820 ### Inspect an image 821 822 `GET /images/(name)/json` 823 824 Return low-level information on the image `name` 825 826 **Example request**: 827 828 GET /images/base/json HTTP/1.1 829 830 **Example response**: 831 832 HTTP/1.1 200 OK 833 Content-Type: application/json 834 835 { 836 "id":"b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc", 837 "parent":"27cf784147099545", 838 "created":"2013-03-23T22:24:18.818426-07:00", 839 "container":"3d67245a8d72ecf13f33dffac9f79dcdf70f75acb84d308770391510e0c23ad0", 840 "container_config": 841 { 842 "Hostname":"", 843 "User":"", 844 "Memory":0, 845 "MemorySwap":0, 846 "AttachStdin":false, 847 "AttachStdout":false, 848 "AttachStderr":false, 849 "ExposedPorts":{}, 850 "Tty":true, 851 "OpenStdin":true, 852 "StdinOnce":false, 853 "Env":null, 854 "Cmd": ["/bin/bash"], 855 "Dns":null, 856 "Image":"base", 857 "Volumes":null, 858 "VolumesFrom":"", 859 "WorkingDir":"" 860 }, 861 "Size": 6824592 862 } 863 864 Status Codes: 865 866 - **200** – no error 867 - **404** – no such image 868 - **500** – server error 869 870 ### Get the history of an image 871 872 `GET /images/(name)/history` 873 874 Return the history of the image `name` 875 876 **Example request**: 877 878 GET /images/base/history HTTP/1.1 879 880 **Example response**: 881 882 HTTP/1.1 200 OK 883 Content-Type: application/json 884 885 [ 886 { 887 "Id": "b750fe79269d", 888 "Created": 1364102658, 889 "CreatedBy": "/bin/bash" 890 }, 891 { 892 "Id": "27cf78414709", 893 "Created": 1364068391, 894 "CreatedBy": "" 895 } 896 ] 897 898 Status Codes: 899 900 - **200** – no error 901 - **404** – no such image 902 - **500** – server error 903 904 ### Push an image on the registry 905 906 `POST /images/(name)/push` 907 908 Push the image `name` on the registry 909 910 **Example request**: 911 912 POST /images/test/push HTTP/1.1 913 914 **Example response**: 915 916 HTTP/1.1 200 OK 917 Content-Type: application/json 918 919 {"status":"Pushing..."} {"status":"Pushing", "progress":"1/? (n/a)"} 920 {"error":"Invalid..."} ... 921 922 > The `X-Registry-Auth` header can be used to 923 > include a base64-encoded AuthConfig object. 924 925 Status Codes: 926 927 - **200** – no error :statuscode 404: no such image :statuscode 928 500: server error 929 930 ### Tag an image into a repository 931 932 `POST /images/(name)/tag` 933 934 Tag the image `name` into a repository 935 936 **Example request**: 937 938 POST /images/test/tag?repo=myrepo&force=0&tag=v42 HTTP/1.1 939 940 **Example response**: 941 942 HTTP/1.1 201 OK 943 944 Query Parameters: 945 946 - **repo** – The repository to tag in 947 - **force** – 1/True/true or 0/False/false, default false 948 - **tag** - The new tag name 949 950 Status Codes: 951 952 - **201** – no error 953 - **400** – bad parameter 954 - **404** – no such image 955 - **409** – conflict 956 - **500** – server error 957 958 ### Remove an image 959 960 `DELETE /images/(name)` 961 962 Remove the image `name` from the filesystem 963 964 **Example request**: 965 966 DELETE /images/test HTTP/1.1 967 968 **Example response**: 969 970 HTTP/1.1 200 OK 971 Content-type: application/json 972 973 [ 974 {"Untagged": "3e2f21a89f"}, 975 {"Deleted": "3e2f21a89f"}, 976 {"Deleted": "53b4f83ac9"} 977 ] 978 979 Status Codes: 980 981 - **200** – no error 982 - **404** – no such image 983 - **409** – conflict 984 - **500** – server error 985 986 ### Search images 987 988 `GET /images/search` 989 990 Search for an image on [Docker Hub](https://hub.docker.com) 991 992 **Example request**: 993 994 GET /images/search?term=sshd HTTP/1.1 995 996 **Example response**: 997 998 HTTP/1.1 200 OK 999 Content-Type: application/json 1000 1001 [ 1002 { 1003 "Name":"cespare/sshd", 1004 "Description":"" 1005 }, 1006 { 1007 "Name":"johnfuller/sshd", 1008 "Description":"" 1009 }, 1010 { 1011 "Name":"dhrp/mongodb-sshd", 1012 "Description":"" 1013 } 1014 ] 1015 1016 :query term: term to search 1017 :statuscode 200: no error 1018 :statuscode 500: server error 1019 1020 ## 2.3 Misc 1021 1022 ### Build an image from Dockerfile via stdin 1023 1024 `POST /build` 1025 1026 Build an image from Dockerfile via stdin 1027 1028 **Example request**: 1029 1030 POST /build HTTP/1.1 1031 1032 {{ TAR STREAM }} 1033 1034 **Example response**: 1035 1036 HTTP/1.1 200 OK 1037 1038 {{ STREAM }} 1039 1040 The stream must be a tar archive compressed with one of the 1041 following algorithms: identity (no compression), gzip, bzip2, xz. 1042 The archive must include a file called Dockerfile at its root. I 1043 may include any number of other files, which will be accessible in 1044 the build context (See the ADD build command). 1045 1046 The Content-type header should be set to "application/tar". 1047 1048 Query Parameters: 1049 1050 - **t** – repository name (and optionally a tag) to be applied to 1051 the resulting image in case of success 1052 - **remote** – build source URI (git or HTTPS/HTTP) 1053 - **q** – suppress verbose build output 1054 - **nocache** – do not use the cache when building the image 1055 1056 Status Codes: 1057 1058 - **200** – no error 1059 - **500** – server error 1060 1061 ### Check auth configuration 1062 1063 `POST /auth` 1064 1065 Get the default username and email 1066 1067 **Example request**: 1068 1069 POST /auth HTTP/1.1 1070 Content-Type: application/json 1071 1072 { 1073 "username":" hannibal", 1074 "password: "xxxx", 1075 "email": "hannibal@a-team.com", 1076 "serveraddress": "https://index.docker.io/v1/" 1077 } 1078 1079 **Example response**: 1080 1081 HTTP/1.1 200 OK 1082 Content-Type: text/plain 1083 1084 Status Codes: 1085 1086 - **200** – no error 1087 - **204** – no error 1088 - **500** – server error 1089 1090 ### Display system-wide information 1091 1092 `GET /info` 1093 1094 Display system-wide information 1095 1096 **Example request**: 1097 1098 GET /info HTTP/1.1 1099 1100 **Example response**: 1101 1102 HTTP/1.1 200 OK 1103 Content-Type: application/json 1104 1105 { 1106 "Containers":11, 1107 "Images":16, 1108 "Debug":false, 1109 "NFd": 11, 1110 "NGoroutines":21, 1111 "MemoryLimit":true, 1112 "SwapLimit":false, 1113 "IPv4Forwarding":true 1114 } 1115 1116 Status Codes: 1117 1118 - **200** – no error 1119 - **500** – server error 1120 1121 ### Show the docker version information 1122 1123 `GET /version` 1124 1125 Show the docker version information 1126 1127 **Example request**: 1128 1129 GET /version HTTP/1.1 1130 1131 **Example response**: 1132 1133 HTTP/1.1 200 OK 1134 Content-Type: application/json 1135 1136 { 1137 "Version":"0.2.2", 1138 "GitCommit":"5a2a5cc+CHANGES", 1139 "GoVersion":"go1.0.3" 1140 } 1141 1142 Status Codes: 1143 1144 - **200** – no error 1145 - **500** – server error 1146 1147 ### Create a new image from a container's changes 1148 1149 `POST /commit` 1150 1151 Create a new image from a container's changes 1152 1153 **Example request**: 1154 1155 POST /commit?container=44c004db4b17&m=message&repo=myrepo HTTP/1.1 1156 Content-Type: application/json 1157 1158 { 1159 "Cmd": ["cat", "/world"], 1160 "ExposedPorts":{"22/tcp":{}} 1161 } 1162 1163 **Example response**: 1164 1165 HTTP/1.1 201 OK 1166 Content-Type: application/vnd.docker.raw-stream 1167 1168 {"Id": "596069db4bf5"} 1169 1170 Query Parameters: 1171 1172 - **container** – source container 1173 - **repo** – repository 1174 - **tag** – tag 1175 - **m** – commit message 1176 - **author** – author (e.g., "John Hannibal Smith 1177 <[hannibal@a-team.com](mailto:hannibal%40a-team.com)>") 1178 1179 Status Codes: 1180 1181 - **201** – no error 1182 - **404** – no such container 1183 - **500** – server error 1184 1185 ### Monitor Docker's events 1186 1187 `GET /events` 1188 1189 Get events from docker, either in real time via streaming, or via 1190 polling (using since). 1191 1192 Docker containers will report the following events: 1193 1194 create, destroy, die, export, kill, pause, restart, start, stop, unpause 1195 1196 and Docker images will report: 1197 1198 untag, delete 1199 1200 **Example request**: 1201 1202 GET /events?since=1374067924 1203 1204 **Example response**: 1205 1206 HTTP/1.1 200 OK 1207 Content-Type: application/json 1208 1209 {"status": "create", "id": "dfdf82bd3881","from": "base:latest", "time":1374067924} 1210 {"status": "start", "id": "dfdf82bd3881","from": "base:latest", "time":1374067924} 1211 {"status": "stop", "id": "dfdf82bd3881","from": "base:latest", "time":1374067966} 1212 {"status": "destroy", "id": "dfdf82bd3881","from": "base:latest", "time":1374067970} 1213 1214 Query Parameters: 1215 1216 - **since** – timestamp used for polling 1217 1218 Status Codes: 1219 1220 - **200** – no error 1221 - **500** – server error 1222 1223 # 3. Going further 1224 1225 ## 3.1 Inside `docker run` 1226 1227 Here are the steps of `docker run` : 1228 1229 - Create the container 1230 1231 - If the status code is 404, it means the image doesn't exist: 1232 - Try to pull it 1233 - Then retry to create the container 1234 1235 - Start the container 1236 1237 - If you are not in detached mode: 1238 - Attach to the container, using logs=1 (to have stdout and 1239 stderr from the container's start) and stream=1 1240 1241 - If in detached mode or only stdin is attached: 1242 - Display the container's id 1243 1244 ## 3.2 Hijacking 1245 1246 In this version of the API, /attach, uses hijacking to transport stdin, 1247 stdout and stderr on the same socket. This might change in the future. 1248 1249 ## 3.3 CORS Requests 1250 1251 To enable cross origin requests to the remote api add the flag 1252 "--api-enable-cors" when running docker in daemon mode. 1253 1254 $ docker -d -H="192.168.1.9:2375" --api-enable-cors