github.com/tompao/docker@v1.9.1/docs/reference/api/docker_remote_api_v1.17.md (about)

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