Docker Engine 的API文档

栏目: 服务器 · 发布时间: 5年前

内容简介:Docker Engine APItitle:“Engine API v1.24”描述:“Docker的API文档”

Docker Engine API

title:“Engine API v1.24”

描述:“Docker的API文档”

关键字:“API,Docker,rcli,REST,文档”

redirect_from:

/engine/reference/api/docker_remote_api_v1.24/

/reference/api/docker_remote_api_v1.24/

1.简介

守护程序侦听unix:///var/run/docker.sock但您可以将

Docker绑定到另一个主机/端口或Unix套接字。

API往往是REST。但是,对于某些复杂的命令,例如attach

或pull,HTTP连接被劫持以进行传输stdout,

stdin并且stderr。

一个Content-Length标题应该是存在于POST请求到端点

意想不到的机构。

要锁定到特定版本的API,请在URL前面加上

要使用的API 版本。例如,/v1.18/info。如果

URL中未包含任何版本,则使用支持的最大API版本。

如果守护程序不支持URL中指定的API版本,

400 Bad Request则会返回HTTP 错误消息。

2.错误

Engine API使用标准HTTP状态代码来指示API调用的成功或失败。响应的主体将采用以下格式的JSON:

{

"message": "page not found"

}

为每个端点返回的状态代码在下面的端点文档中指定。

3.端点

3.1容器

列出容器

GET /containers/json

列出容器

示例请求:

GET /v1.24/containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

[

{

"Id": "8dfafdbc3a40",

"Names":["/boring_feynman"],

"Image": "ubuntu:latest",

"ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82",

"Command": "echo 1",

"Created": 1367854155,

"State": "exited",

"Status": "Exit 0",

"Ports": [{"PrivatePort": 2222, "PublicPort": 3333, "Type": "tcp"}],

"Labels": {

"com.example.vendor": "Acme",

"com.example.license": "GPL",

"com.example.version": "1.0"

},

"SizeRw": 12288,

"SizeRootFs": 0,

"HostConfig": {

"NetworkMode": "default"

},

"NetworkSettings": {

"Networks": {

"bridge": {

"IPAMConfig": null,

"Links": null,

"Aliases": null,

"NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812",

"EndpointID": "2cdc4edb1ded3631c81f57966563e5c8525b81121bb3706a9a9a3ae102711f3f",

"Gateway": "172.17.0.1",

"IPAddress": "172.17.0.2",

"IPPrefixLen": 16,

"IPv6Gateway": "",

"GlobalIPv6Address": "",

"GlobalIPv6PrefixLen": 0,

"MacAddress": "02:42:ac:11:00:02"

}

}

},

"Mounts": [

{

"Name": "fac362...80535",

"Source": "/data",

"Destination": "/data",

"Driver": "local",

"Mode": "ro,Z",

"RW": false,

"Propagation": ""

}

]

},

{

"Id": "9cd87474be90",

"Names":["/coolName"],

"Image": "ubuntu:latest",

"ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82",

"Command": "echo 222222",

"Created": 1367854155,

"State": "exited",

"Status": "Exit 0",

"Ports": [],

"Labels": {},

"SizeRw": 12288,

"SizeRootFs": 0,

"HostConfig": {

"NetworkMode": "default"

},

"NetworkSettings": {

"Networks": {

"bridge": {

"IPAMConfig": null,

"Links": null,

"Aliases": null,

"NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812",

"EndpointID": "88eaed7b37b38c2a3f0c4bc796494fdf51b270c2d22656412a2ca5d559a64d7a",

"Gateway": "172.17.0.1",

"IPAddress": "172.17.0.8",

"IPPrefixLen": 16,

"IPv6Gateway": "",

"GlobalIPv6Address": "",

"GlobalIPv6PrefixLen": 0,

"MacAddress": "02:42:ac:11:00:08"

}

}

},

"Mounts": []

},

{

"Id": "3176a2479c92",

"Names":["/sleepy_dog"],

"Image": "ubuntu:latest",

"ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82",

"Command": "echo 3333333333333333",

"Created": 1367854154,

"State": "exited",

"Status": "Exit 0",

"Ports":[],

"Labels": {},

"SizeRw":12288,

"SizeRootFs":0,

"HostConfig": {

"NetworkMode": "default"

},

"NetworkSettings": {

"Networks": {

"bridge": {

"IPAMConfig": null,

"Links": null,

"Aliases": null,

"NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812",

"EndpointID": "8b27c041c30326d59cd6e6f510d4f8d1d570a228466f956edf7815508f78e30d",

"Gateway": "172.17.0.1",

"IPAddress": "172.17.0.6",

"IPPrefixLen": 16,

"IPv6Gateway": "",

"GlobalIPv6Address": "",

"GlobalIPv6PrefixLen": 0,

"MacAddress": "02:42:ac:11:00:06"

}

}

},

"Mounts": []

},

{

"Id": "4cb07b47f9fb",

"Names":["/running_cat"],

"Image": "ubuntu:latest",

"ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82",

"Command": "echo 444444444444444444444444444444444",

"Created": 1367854152,

"State": "exited",

"Status": "Exit 0",

"Ports": [],

"Labels": {},

"SizeRw": 12288,

"SizeRootFs": 0,

"HostConfig": {

"NetworkMode": "default"

},

"NetworkSettings": {

"Networks": {

"bridge": {

"IPAMConfig": null,

"Links": null,

"Aliases": null,

"NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812",

"EndpointID": "d91c7b2f0644403d7ef3095985ea0e2370325cd2332ff3a3225c4247328e66e9",

"Gateway": "172.17.0.1",

"IPAddress": "172.17.0.5",

"IPPrefixLen": 16,

"IPv6Gateway": "",

"GlobalIPv6Address": "",

"GlobalIPv6PrefixLen": 0,

"MacAddress": "02:42:ac:11:00:05"

}

}

},

"Mounts": []

}

]

查询参数:

all - 1 / True / true或0 / False / false,显示所有容器。

默认情况下仅显示正在运行的容器(即,默认为false)

limit - 显示limit上次创建的

容器,包括非运行容器。

since - 仅显示自Id以来创建的容器,包括

非运行容器。

before - 仅显示在Id之前创建的容器,包括

非运行的容器。

size - 1 / True / true或0 / False / false,显示容器

大小

filters - map[string][]string要在容器列表上处理的过滤器(a )的JSON编码值。可用过滤器:

exited=; - 出口代码为 ;

status=(created|restarting|running|paused|exited|dead)

label=key或label="key=value"容器标签

isolation=(default| process| hyperv)(仅限Windows守护程序)

ancestor=([:], 或 image@digest

before=(或)

since=(或)

volume=(或)

network=(或)

状态代码:

200 - 没有错误

400 - 参数不好

500 - 服务器错误

创建一个容器

POST /containers/create

创建一个容器

示例请求:

POST /v1.24/containers/create HTTP/1.1

Content-Type: application/json

Content-Length: 12345

{

"Hostname": "",

"Domainname": "",

"User": "",

"AttachStdin": false,

"AttachStdout": true,

"AttachStderr": true,

"Tty": false,

"OpenStdin": false,

"StdinOnce": false,

"Env": [

"FOO=bar",

"BAZ=quux"

],

"Cmd": [

"date"

],

"Entrypoint": "",

"Image": "ubuntu",

"Labels": {

"com.example.vendor": "Acme",

"com.example.license": "GPL",

"com.example.version": "1.0"

},

"Volumes": {

"/volumes/data": {}

},

"Healthcheck":{

"Test": ["CMD-SHELL", "curl localhost:3000"],

"Interval": 1000000000,

"Timeout": 10000000000,

"Retries": 10,

"StartPeriod": 60000000000

},

"WorkingDir": "",

"NetworkDisabled": false,

"MacAddress": "12:34:56:78:9a:bc",

"ExposedPorts": {

"22/tcp": {}

},

"StopSignal": "SIGTERM",

"HostConfig": {

"Binds": ["/tmp:/tmp"],

"Tmpfs": { "/run": "rw,noexec,nosuid,size=65536k" },

"Links": ["redis3:redis"],

"Memory": 0,

"MemorySwap": 0,

"MemoryReservation": 0,

"KernelMemory": 0,

"CpuPercent": 80,

"CpuShares": 512,

"CpuPeriod": 100000,

"CpuQuota": 50000,

"CpusetCpus": "0,1",

"CpusetMems": "0,1",

"IOMaximumBandwidth": 0,

"IOMaximumIOps": 0,

"BlkioWeight": 300,

"BlkioWeightDevice": [{}],

"BlkioDeviceReadBps": [{}],

"BlkioDeviceReadIOps": [{}],

"BlkioDeviceWriteBps": [{}],

"BlkioDeviceWriteIOps": [{}],

"MemorySwappiness": 60,

"OomKillDisable": false,

"OomScoreAdj": 500,

"PidMode": "",

"PidsLimit": -1,

"PortBindings": { "22/tcp": [{ "HostPort": "11022" }] },

"PublishAllPorts": false,

"Privileged": false,

"ReadonlyRootfs": false,

"Dns": ["8.8.8.8"],

"DnsOptions": [""],

"DnsSearch": [""],

"ExtraHosts": null,

"VolumesFrom": ["parent", "other:ro"],

"CapAdd": ["NET_ADMIN"],

"CapDrop": ["MKNOD"],

"GroupAdd": ["newgroup"],

"RestartPolicy": { "Name": "", "MaximumRetryCount": 0 },

"NetworkMode": "bridge",

"Devices": [],

"Sysctls": { "net.ipv4.ip_forward": "1" },

"Ulimits": [{}],

"LogConfig": { "Type": "json-file", "Config": {} },

"SecurityOpt": [],

"StorageOpt": {},

"CgroupParent": "",

"VolumeDriver": "",

"ShmSize": 67108864

},

"NetworkingConfig": {

"EndpointsConfig": {

"isolated_nw" : {

"IPAMConfig": {

"IPv4Address":"172.20.30.33",

"IPv6Address":"2001:db8:abcd::3033",

"LinkLocalIPs":["169.254.34.68", "fe80::3468"]

},

"Links":["container_1", "container_2"],

"Aliases":["server_x", "server_y"]

}

}

}

}

响应示例:

HTTP/1.1 201 Created

Content-Type: application/json

{

"Id":"e90e34656806",

"Warnings":[]

}

JSON参数:

主机名 - 包含用于

容器的主机名的字符串值。这必须是有效的RFC 1123主机名。

Domainname - 包含

用于容器的域名的字符串值。

User - 指定容器内用户的字符串值。

AttachStdin - 布尔值,附加到stdin。

AttachStdout - 布尔值,附加到stdout。

AttachStderr - 布尔值,附加到stderr。

Tty - 布尔值,将标准流附加到a tty,包括stdin它是否未关闭。

OpenStdin - 布尔值,打开stdin,

StdinOnce - 布尔值,stdin在1个连接的客户端断开连接后关闭。

Env - 以。形式的环境变量列表["VAR=value", ...]

标签 - 向容器添加标签映射。要指定地图:{"key":"value", ... }

Cmd - 要指定为字符串或字符串数​​组的命令。

入口点 -设置入口点容器作为字符串或数组

串。

Image - 一个字符串,指定用于容器的图像名称。

卷 - 将

容器内的挂载点路径(字符串)映射到空对象的对象。

Healthcheck - 用于检查容器是否健康的测试。

Test- The test to perform. Possible values are:

+ {} inherit healthcheck from image or parent image

+ {"NONE"} disable healthcheck

+ {"CMD", args...} exec arguments directly

+ {"CMD-SHELL", command} run command with system's default shell

Interval- The time to wait between checks in nanoseconds. It should be 0 or at least 1000000 (1 ms). 0 means inherit.

Timeout- The time to wait before considering the check to have hung. It should be 0 or at least 1000000 (1 ms). 0 means inherit.

Retries- The number of consecutive failures needed to consider a container as unhealthy. 0 means inherit.

StartPeriod- The time to wait for container initialization before starting health-retries countdown in nanoseconds. It should be 0 or at least 1000000 (1 ms). 0 means inherit.

WorkingDir - 一个字符串,指定要在其中

运行的命令的工作目录。

NetworkDisabled - 布尔值,当为true时禁用

容器的网络连接

ExposedPorts - 以下列形式将端口映射到空对象的对象:

"ExposedPorts": { "/<tcp|udp>: {}" }

StopSignal - 用于将容器作为字符串或无符号整数停止的信号。SIGTERM默认情况下。

hostconfig中

绑定 - 此容器的卷绑定列表。每个卷绑定都是以下其中一种形式的字符串:

host-src:container-dest将主机路径绑定到

容器中。两者host-src,并且container-dest必须是

绝对路径。

host-src:container-dest:ro使绑定装置

在容器内只读。两者host-src,并且container-dest必须是

一个绝对路径。

volume-name:container-dest将

卷驱动程序管理的卷绑定到容器中。container-dest必须是

绝对的道路。

volume-name:container-dest:ro将卷只读装入

容器内。 container-dest必须是绝对的道路。

Tmpfs - 容器目录的映射,应该由tmpfs挂载替换,以及它们相应的

挂载选项。表单中的JSON对象{ "/run": "rw,noexec,nosuid,size=65536k" }。

链接 - 容器的链接列表。每个链接条目应采用

以下形式container_name:alias。

内存 - 内存限制,以字节为单位

MemorySwap - 总内存限制(内存+交换); 设置-1为启用无限制交换。

您必须使用它memory并使交换值大于memory。

MemoryReservation - 内存软限制,以字节为单位。

KernelMemory - 内核内存限制,以字节为单位。

CpuPercent - 包含可用CPU的可用百分比的整数值。(仅限Windows守护程序)

CpuShares - 包含容器的CPU份额的整数值

(即相对于其他容器的相对权重)。

CpuPeriod - CPU周期的长度,以微秒为单位。

CpuQuota - 容器在CPU周期内可以获得的CPU时间的微秒数。

CpusetCpus - 包含cgroups CpusetCpus要使用的字符串值。

CpusetMems - 允许执行的内存节点(MEM)(0-3,0,1)。仅对NUMA系统有效。

IOMaximumBandwidth - 以IOps表示的最大IO绝对速率。

IOMaximumIOps - 以每秒字节数表示的最大IO绝对速率。

BlkioWeight - Block IO weight(相对权重)接受10到1000之间的权重值。

BlkioWeightDevice - 以下列形式阻止IO重量(相对设备重量): "BlkioWeightDevice": [{"Path": "device_path", "Weight": weight}]

BlkioDeviceReadBps - 以下列形式限制设备的读取速率(每秒字节数) "BlkioDeviceReadBps": [{"Path": "device_path", "Rate": rate}],例如:

"BlkioDeviceReadBps": [{"Path": "/dev/sda", "Rate": "1024"}]"

BlkioDeviceWriteBps - 以下列形式限制设备的写入速率(每秒字节数) "BlkioDeviceWriteBps": [{"Path": "device_path", "Rate": rate}],例如:

"BlkioDeviceWriteBps": [{"Path": "/dev/sda", "Rate": "1024"}]"

BlkioDeviceReadIOps - 以下列形式限制设备的读取速率(每秒IO) "BlkioDeviceReadIOps": [{"Path": "device_path", "Rate": rate}],例如:

"BlkioDeviceReadIOps": [{"Path": "/dev/sda", "Rate": "1000"}]

BlkioDeviceWriteIOps - 以下列形式限制设备的写入速率(每秒IO) "BlkioDeviceWriteIOps": [{"Path": "device_path", "Rate": rate}],例如:

"BlkioDeviceWriteIOps": [{"Path": "/dev/sda", "Rate": "1000"}]

MemorySwappiness - 调整容器的内存swappiness行为。接受0到100之间的整数。

OomKillDisable - 布尔值,是否为容器禁用OOM Killer。

OomScoreAdj - 一个整数值,包含给容器的分数,以便调整OOM杀手首选项。

PidMode - 设置容器的PID(进程)命名空间模式;

"container:<name|id>":加入另一个容器的PID名称空间

"host":在容器内使用主机的PID名称空间

PidsLimit - 调整容器的pids限制。设置-1为无限制。

PortBindings - 公开的容器端口的映射以及它们

应映射到的主机端口。表单中的JSON对象

{ /: [{ "HostPort": "" }] }

记录port指定为字符串而不是整数值。

PublishAllPorts - 为所有容器的

公开端口分配一个临时主机端口。指定为布尔值。

当容器停止并在容器启动时分配端口时,将取消分配端口。

重新启动容器时可能会更改分配的端口。

端口是从依赖内核的临时端口范围中选择的。

例如,在 Linux 上,范围由定义/proc/sys/net/ipv4/ip_local_port_range。

Privileged - 授予容器对主机的完全访问权限。指定为

布尔值。

ReadonlyRootfs - 将容器的根文件系统挂载为只读。

指定为布尔值。

Dns - 要使用的容器的DNS服务器列表。

DnsOptions - DNS选项列表

DnsSearch - DNS搜索域列表

ExtraHosts - 要添加到

容器/etc/hosts文件的主机名/ IP映射列表。在表格中指定["hostname:IP"]。

VolumesFrom - 要从其他容器继承的卷列表。

在表格中指定[:<ro|rw>]

CapAdd - 要添加到容器的内核功能列表。

Capdrop - 要从容器中删除的内核功能列表。

GroupAdd - 容器进程将作为其运行的其他组的列表

RestartPolicy - 容器退出时应用的行为。的

值是与一个对象Name的任一属性"always",以

总是重新启动,"unless-stopped"以重新启动总是除了当

用户已经手动地停止在该容器或"on-failure"仅当容器重新启动

退出代码是非零的。如果on-failure使用,则MaximumRetryCount

控制放弃前重试的次数。

默认情况下不重启。(可选) 在每次重启之前添加

一个不断增加的延迟(前一个延迟的两倍,从100mS开始),

以防止洪泛服务器。

UsernsMode - 在启用usernamespace重映射选项时设置容器的用户名空间模式。

支持的值是:host。

NetworkMode - 设置容器的网络模式。支持的

标准值是:bridge,host,none,和container:<name|id>。任何其他值都将

作为此容器应连接到的自定义网络名称。

设备 - 要添加到在

表单中指定为JSON对象的容器的设备列表

{ "PathOnHost": "/dev/deviceName", "PathInContainer": "/dev/deviceName", "CgroupPermissions": "mrw"}

Ulimits - 要在容器中设置的ulimits列表

{ "Name": , "Soft": , "Hard":  },例如:

Ulimits: { "Name": "nofile", "Soft": 1024, "Hard": 2048 }

Sysctls - 要在容器中设置的内核参数(sysctls)列表

{ :  },例如:

{ "net.ipv4.ip_forward": "1" }

SecurityOpt:用于自定义MLS

系统标签的字符串值列表,例如SELinux。

StorageOpt:每个容器的存储驱动程序选项。选项可以在表单中传递

{"size":"120G"}

LogConfig - 容器的日志配置,在表单中指定为JSON对象

{ "Type": "<driver_name>", "Config": {"key1": "val1"}}。

可用类型:json-file,syslog,journald,gelf,fluentd,awslogs,splunk,etwlogs,none。

json-file记录驱动程序

CgroupParent - 创建cgroups容器的路径cgroup。如果路径不是绝对路径,则认为cgroups路径相对于init进程的路径。如果Cgroup尚不存在,则会创建它们。

VolumeDriver - 此容器用户装入卷的驱动程序。

ShmSize - /dev/shm以字节为单位的大小。大小必须大于0.如果省略,系统使用64MB。

查询参数:

name - 将指定的名称分配给容器。必须

匹配/?[a-zA-Z0-9_-]+。

状态代码:

201 - 没有错误

400 - 参数不好

404 - 没有这样的容器

406 - 无法连接(容器未运行)

409 - 冲突

500 - 服务器错误

检查容器

GET /containers/(id or name)/json

返回容器上的低级信息 id

示例请求:

GET /v1.24/containers/4fa6e0f0c678/json HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

{

"AppArmorProfile": "",

"Args": [

"-c",

"exit 9"

],

"Config": {

"AttachStderr": true,

"AttachStdin": false,

"AttachStdout": true,

"Cmd": [

"/bin/sh",

"-c",

"exit 9"

],

"Domainname": "",

"Entrypoint": null,

"Env": [

"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

],

"ExposedPorts": null,

"Hostname": "ba033ac44011",

"Image": "ubuntu",

"Labels": {

"com.example.vendor": "Acme",

"com.example.license": "GPL",

"com.example.version": "1.0"

},

"MacAddress": "",

"NetworkDisabled": false,

"OnBuild": null,

"OpenStdin": false,

"StdinOnce": false,

"Tty": false,

"User": "",

"Volumes": {

"/volumes/data": {}

},

"WorkingDir": "",

"StopSignal": "SIGTERM"

},

"Created": "2015-01-06T15:47:31.485331387Z",

"Driver": "devicemapper",

"ExecIDs": null,

"HostConfig": {

"Binds": null,

"IOMaximumBandwidth": 0,

"IOMaximumIOps": 0,

"BlkioWeight": 0,

"BlkioWeightDevice": [{}],

"BlkioDeviceReadBps": [{}],

"BlkioDeviceWriteBps": [{}],

"BlkioDeviceReadIOps": [{}],

"BlkioDeviceWriteIOps": [{}],

"CapAdd": null,

"CapDrop": null,

"ContainerIDFile": "",

"CpusetCpus": "",

"CpusetMems": "",

"CpuPercent": 80,

"CpuShares": 0,

"CpuPeriod": 100000,

"Devices": [],

"Dns": null,

"DnsOptions": null,

"DnsSearch": null,

"ExtraHosts": null,

"IpcMode": "",

"Links": null,

"LxcConf": [],

"Memory": 0,

"MemorySwap": 0,

"MemoryReservation": 0,

"KernelMemory": 0,

"OomKillDisable": false,

"OomScoreAdj": 500,

"NetworkMode": "bridge",

"PidMode": "",

"PortBindings": {},

"Privileged": false,

"ReadonlyRootfs": false,

"PublishAllPorts": false,

"RestartPolicy": {

"MaximumRetryCount": 2,

"Name": "on-failure"

},

"LogConfig": {

"Config": null,

"Type": "json-file"

},

"SecurityOpt": null,

"Sysctls": {

"net.ipv4.ip_forward": "1"

},

"StorageOpt": null,

"VolumesFrom": null,

"Ulimits": [{}],

"VolumeDriver": "",

"ShmSize": 67108864

},

"HostnamePath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname",

"HostsPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts",

"LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log",

"Id": "ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39",

"Image": "04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2",

"MountLabel": "",

"Name": "/boring_euclid",

"NetworkSettings": {

"Bridge": "",

"SandboxID": "",

"HairpinMode": false,

"LinkLocalIPv6Address": "",

"LinkLocalIPv6PrefixLen": 0,

"Ports": null,

"SandboxKey": "",

"SecondaryIPAddresses": null,

"SecondaryIPv6Addresses": null,

"EndpointID": "",

"Gateway": "",

"GlobalIPv6Address": "",

"GlobalIPv6PrefixLen": 0,

"IPAddress": "",

"IPPrefixLen": 0,

"IPv6Gateway": "",

"MacAddress": "",

"Networks": {

"bridge": {

"NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812",

"EndpointID": "7587b82f0dada3656fda26588aee72630c6fab1536d36e394b2bfbcf898c971d",

"Gateway": "172.17.0.1",

"IPAddress": "172.17.0.2",

"IPPrefixLen": 16,

"IPv6Gateway": "",

"GlobalIPv6Address": "",

"GlobalIPv6PrefixLen": 0,

"MacAddress": "02:42:ac:12:00:02"

}

}

},

"Path": "/bin/sh",

"ProcessLabel": "",

"ResolvConfPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf",

"RestartCount": 1,

"State": {

"Error": "",

"ExitCode": 9,

"FinishedAt": "2015-01-06T15:47:32.080254511Z",

"OOMKilled": false,

"Dead": false,

"Paused": false,

"Pid": 0,

"Restarting": false,

"Running": true,

"StartedAt": "2015-01-06T15:47:32.072697474Z",

"Status": "running"

},

"Mounts": [

{

"Name": "fac362...80535",

"Source": "/data",

"Destination": "/data",

"Driver": "local",

"Mode": "ro,Z",

"RW": false,

"Propagation": ""

}

]

}

示例请求,包含大小信息:

GET /v1.24/containers/4fa6e0f0c678/json?size=1 HTTP/1.1

示例响应,包含大小信息:

HTTP/1.1 200 OK

Content-Type: application/json

{

....

"SizeRw": 0,

"SizeRootFs": 972,

....

}

查询参数:

size - 1 / True / true或0 / False / false,返回容器大小信息。默认是false。

状态代码:

200 - 没有错误

404 - 没有这样的容器

500 - 服务器错误

列出在容器内运行的进程

GET /containers/(id or name)/top

列出在容器内运行的进程id。在Unix系统上,这

是通过运行ps命令完成的。

Windows 不支持此端点。

示例请求:

GET /v1.24/containers/4fa6e0f0c678/top HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

{

"Titles" : [

"UID", "PID", "PPID", "C", "STIME", "TTY", "TIME", "CMD"

],

"Processes" : [

[

"root", "13642", "882", "0", "17:03", "pts/0", "00:00:00", "/bin/bash"

],

[

"root", "13735", "13642", "0", "17:06", "pts/0", "00:00:00", "sleep 10"

]

]

}

示例请求:

GET /v1.24/containers/4fa6e0f0c678/top?ps_args=aux HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

{

"Titles" : [

"USER","PID","%CPU","%MEM","VSZ","RSS","TTY","STAT","START","TIME","COMMAND"

]

"Processes" : [

[

"root","13642","0.0","0.1","18172","3184","pts/0","Ss","17:03","0:00","/bin/bash"

],

[

"root","13895","0.0","0.0","4348","692","pts/0","S+","17:15","0:00","sleep 10"

]

],

}

查询参数:

ps_args - ps要使用的参数(例如aux),默认为-ef

状态代码:

200 - 没有错误

404 - 没有这样的容器

500 - 服务器错误

获取容器日志

GET /containers/(id or name)/logs

从容器中获取stdout并stderr记录id

注意:

此端点仅适用于具有json-file或journald记录驱动程序的容器。

示例请求:

GET /v1.24/containers/4fa6e0f0c678/logs?stderr=1&stdout=1&timestamps=1&follow=1&tail=10&since=1428990821 HTTP/1.1

响应示例:

HTTP/1.1 101 UPGRADED

Content-Type: application/vnd.docker.raw-stream

Connection: Upgrade

Upgrade: tcp

{% raw %}

{{ STREAM }}

{% endraw %}

查询参数:

details - 1 / True / true或0 / False / false,显示提供给日志的额外详细信息。默认false。

follow - 1 / True / true或0 / False / false,返回流。默认false。

stdout - 1 / True / true或0 / False / false,显示stdout日志。默认false。

stderr - 1 / True / true或0 / False / false,显示stderr日志。默认false。

since - UNIX时间戳(整数)来过滤日志。指定时间戳

将仅输出自该时间戳以来的日志条目。默认值:0(未过滤)

timestamps - 1 / True / true或0 / False / false,打印

每个日志行的时间戳。默认false。

tail - 在日志末尾输出指定的行数:all或。全部默认。

状态代码:

101 - 没有错误,提示有关劫持的代理

200 - 没有错误,没有找到升级头

404 - 没有这样的容器

500 - 服务器错误

检查容器文件系统上的更改

GET /containers/(id or name)/changes

检查容器id文件系统的更改

示例请求:

GET /v1.24/containers/4fa6e0f0c678/changes HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

[

{

"Path": "/dev",

"Kind": 0

},

{

"Path": "/dev/kmsg",

"Kind": 1

},

{

"Path": "/test",

"Kind": 1

}

]

值Kind:

0:修改

1:添加

2:删除

状态代码:

200 - 没有错误

404 - 没有这样的容器

500 - 服务器错误

导出容器

GET /containers/(id or name)/export

导出容器的内容 id

示例请求:

GET /v1.24/containers/4fa6e0f0c678/export HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/octet-stream

{% raw %}

{{ TAR STREAM }}

{% endraw %}

状态代码:

200 - 没有错误

404 - 没有这样的容器

500 - 服务器错误

根据资源使用情况获取容器统计信息

GET /containers/(id or name)/stats

此端点返回容器资源使用情况统计信息的实时流。

示例请求:

GET /v1.24/containers/redis1/stats HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

{

"read" : "2015-01-08T22:57:31.547920715Z",

"pids_stats": {

"current": 3

},

"networks": {

"eth0": {

"rx_bytes": 5338,

"rx_dropped": 0,

"rx_errors": 0,

"rx_packets": 36,

"tx_bytes": 648,

"tx_dropped": 0,

"tx_errors": 0,

"tx_packets": 8

},

"eth5": {

"rx_bytes": 4641,

"rx_dropped": 0,

"rx_errors": 0,

"rx_packets": 26,

"tx_bytes": 690,

"tx_dropped": 0,

"tx_errors": 0,

"tx_packets": 9

}

},

"memory_stats" : {

"stats" : {

"total_pgmajfault" : 0,

"cache" : 0,

"mapped_file" : 0,

"total_inactive_file" : 0,

"pgpgout" : 414,

"rss" : 6537216,

"total_mapped_file" : 0,

"writeback" : 0,

"unevictable" : 0,

"pgpgin" : 477,

"total_unevictable" : 0,

"pgmajfault" : 0,

"total_rss" : 6537216,

"total_rss_huge" : 6291456,

"total_writeback" : 0,

"total_inactive_anon" : 0,

"rss_huge" : 6291456,

"hierarchical_memory_limit" : 67108864,

"total_pgfault" : 964,

"total_active_file" : 0,

"active_anon" : 6537216,

"total_active_anon" : 6537216,

"total_pgpgout" : 414,

"total_cache" : 0,

"inactive_anon" : 0,

"active_file" : 0,

"pgfault" : 964,

"inactive_file" : 0,

"total_pgpgin" : 477

},

"max_usage" : 6651904,

"usage" : 6537216,

"failcnt" : 0,

"limit" : 67108864

},

"blkio_stats" : {},

"cpu_stats" : {

"cpu_usage" : {

"percpu_usage" : [

8646879,

24472255,

36438778,

30657443

],

"usage_in_usermode" : 50000000,

"total_usage" : 100215355,

"usage_in_kernelmode" : 30000000

},

"system_cpu_usage" : 739306590000000,

"throttling_data" : {"periods":0,"throttled_periods":0,"throttled_time":0}

},

"precpu_stats" : {

"cpu_usage" : {

"percpu_usage" : [

8646879,

24350896,

36438778,

30657443

],

"usage_in_usermode" : 50000000,

"total_usage" : 100093996,

"usage_in_kernelmode" : 30000000

},

"system_cpu_usage" : 9492140000000,

"throttling_data" : {"periods":0,"throttled_periods":0,"throttled_time":0}

}

}

的precpu_stats是的CPU统计先前读取,其被用于计算的CPU使用率百分比。它不是该cpu_stats领域的确切副本。

查询参数:

stream - 1 / True / true或0 / False / false,拉一次stats然后断开连接。默认true。

状态代码:

200 - 没有错误

404 - 没有这样的容器

500 - 服务器错误

调整容器TTY的大小

POST /containers/(id or name)/resize

使用容器调整容器的TTY大小 id。单位是字符数。必须重新启动容器才能使调整大小生效。

示例请求:

POST /v1.24/containers/4fa6e0f0c678/resize?h=40&w=80 HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Length: 0

Content-Type: text/plain; charset=utf-8

查询参数:

h - tty会话高度

w - 宽度

状态代码:

200 - 没有错误

404 - 没有这样的容器

500 - 无法调整容器大小

启动一个容器

POST /containers/(id or name)/start

启动容器 id

示例请求:

POST /v1.24/containers/e90e34656806/start HTTP/1.1

响应示例:

HTTP/1.1 204 No Content

查询参数:

detachKeys - 覆盖用于分离

容器的键序列。格式是一个单独的字符[a-Z]或ctrl-

其中是下列之一:a-z,@,^,[,,或_。

状态代码:

204 - 没有错误

304 - 容器已经启动

404 - 没有这样的容器

500 - 服务器错误

停止一个容器

POST /containers/(id or name)/stop

停止容器 id

示例请求:

POST /v1.24/containers/e90e34656806/stop?t=5 HTTP/1.1

响应示例:

HTTP/1.1 204 No Content

查询参数:

t - 杀死容器之前等待的秒数

状态代码:

204 - 没有错误

304 - 容器已停止

404 - 没有这样的容器

500 - 服务器错误

重启容器

POST /containers/(id or name)/restart

重启容器 id

示例请求:

POST /v1.24/containers/e90e34656806/restart?t=5 HTTP/1.1

响应示例:

HTTP/1.1 204 No Content

查询参数:

t - 杀死容器之前等待的秒数

状态代码:

204 - 没有错误

404 - 没有这样的容器

500 - 服务器错误

杀死一个容器

POST /containers/(id or name)/kill

杀死容器 id

示例请求:

POST /v1.24/containers/e90e34656806/kill HTTP/1.1

响应示例:

HTTP/1.1 204 No Content

查询参数:

signal - 要发送到容器的信号:整数或字符串之类SIGINT。

如果未设置,SIGKILL则假定并且呼叫等待容器退出。

状态代码:

204 - 没有错误

404 - 没有这样的容器

500 - 服务器错误

更新容器

POST /containers/(id or name)/update

更新一个或多个容器的配置。

示例请求:

POST /v1.24/containers/e90e34656806/update HTTP/1.1

Content-Type: application/json

Content-Length: 12345

{

"BlkioWeight": 300,

"CpuShares": 512,

"CpuPeriod": 100000,

"CpuQuota": 50000,

"CpusetCpus": "0,1",

"CpusetMems": "0",

"Memory": 314572800,

"MemorySwap": 514288000,

"MemoryReservation": 209715200,

"KernelMemory": 52428800,

"RestartPolicy": {

"MaximumRetryCount": 4,

"Name": "on-failure"

}

}

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

{

"Warnings": []

}

状态代码:

200 - 没有错误

400 - 参数不好

404 - 没有这样的容器

500 - 服务器错误

重命名容器

POST /containers/(id or name)/rename

将容器重命名id为new_name

示例请求:

POST /v1.24/containers/e90e34656806/rename?name=new_name HTTP/1.1

响应示例:

HTTP/1.1 204 No Content

查询参数:

name - 容器的新名称

状态代码:

204 - 没有错误

404 - 没有这样的容器

409 - 已分配冲突名称

500 - 服务器错误

暂停容器

POST /containers/(id or name)/pause

暂停容器 id

示例请求:

POST /v1.24/containers/e90e34656806/pause HTTP/1.1

响应示例:

HTTP/1.1 204 No Content

状态代码:

204 - 没有错误

404 - 没有这样的容器

500 - 服务器错误

取消暂停容器

POST /containers/(id or name)/unpause

取消暂停容器 id

示例请求:

POST /v1.24/containers/e90e34656806/unpause HTTP/1.1

响应示例:

HTTP/1.1 204 No Content

状态代码:

204 - 没有错误

404 - 没有这样的容器

500 - 服务器错误

附在容器上

POST /containers/(id or name)/attach

附在容器上 id

示例请求:

POST /v1.24/containers/16253994b7c4/attach?logs=1&stream=0&stdout=1 HTTP/1.1

响应示例:

HTTP/1.1 101 UPGRADED

Content-Type: application/vnd.docker.raw-stream

Connection: Upgrade

Upgrade: tcp

{% raw %}

{{ STREAM }}

{% endraw %}

查询参数:

detachKeys - 覆盖用于分离

容器的键序列。格式是一个单独的字符[a-Z]或ctrl-

其中是下列之一:a-z,@,^,[,,或_。

logs - 1 / True / true或0 / False / false,返回日志。默认false。

stream - 1 / True / true或0 / False / false,返回流。

默认false。

stdin - 1 / True / true或0 / False / false,if stream=true,attach

to stdin。默认false。

stdout - 1 / True / true或0 / False / false,if logs=true,return

stdoutlog,if stream=true,attach to stdout。默认false。

stderr - 1 / True / true或0 / False / false,if logs=true,return

stderrlog,if stream=true,attach to stderr。默认false。

状态代码:

101 - 没有错误,提示有关劫持的代理

200 - 没有错误,没有找到升级头

400 - 参数不好

404 - 没有这样的容器

409 - 容器暂停

500 - 服务器错误

流细节:

当启用TTY设置时

POST /containers/create

流是来自进程PTY和客户端的原始数据stdin。

当TTY被禁用时,流被多路复用以分离

stdout和stderr。

格式是标题和有效载荷(帧)。

HEADER

标头包含流写入(stdout或

stderr)的信息。它还包含在

最后四个字节(uint32)中编码的相关帧的大小。

它在前八个字节上编码,如下所示:

header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}

STREAM_TYPE 可:

0 :( stdin已写入stdout)

1: stdout

2: stderr

SIZE1, SIZE2, SIZE3, SIZE4是编码为大端

的uint32大小的四个字节。

有效载荷

有效负载是原始流。

实施

实现Attach协议的最简单方法如下:

  1. Read eight bytes.
  2. Choose stdout or stderr depending on the first byte.
  3. Extract the frame size from the last four bytes.
  4. Read the extracted size and output it on the correct output.
  5. Goto 1. 连接到容器(websocket) GET /containers/(id or name)/attach/ws

id通过websocket 连接到容器

根据RFC 6455实现websocket协议握手

示例请求

GET /v1.24/containers/e90e34656806/attach/ws?logs=0&stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1

响应示例

{% raw %}

{{ STREAM }}

{% endraw %}

查询参数:

detachKeys - 覆盖用于分离

容器的键序列。格式是一个单独的字符[a-Z]或ctrl-

其中是下列之一:a-z,@,^,[,,或_。

logs - 1 / True / true或0 / False / false,返回日志。默认false。

stream - 1 / True / true或0 / False / false,返回流。

默认false。

stdin - 1 / True / true或0 / False / false,if stream=true,attach

to stdin。默认false。

stdout - 1 / True / true或0 / False / false,if logs=true,return

stdoutlog,if stream=true,attach to stdout。默认false。

stderr - 1 / True / true或0 / False / false,if logs=true,return

stderrlog,if stream=true,attach to stderr。默认false。

状态代码:

200 - 没有错误

400 - 参数不好

404 - 没有这样的容器

500 - 服务器错误

等一个容器

POST /containers/(id or name)/wait

阻止直到容器id停止,然后返回退出代码

示例请求:

POST /v1.24/containers/16253994b7c4/wait HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

{"StatusCode": 0}

状态代码:

200 - 没有错误

404 - 没有这样的容器

500 - 服务器错误

删除容器

DELETE /containers/(id or name)

id从文件系统中删除容器

示例请求:

DELETE /v1.24/containers/16253994b7c4?v=1 HTTP/1.1

响应示例:

HTTP/1.1 204 No Content

查询参数:

v - 1 / True / true或0 / False / false,删除

与容器关联的卷。默认false。

force - 1 / True / true或0 / False / false,Kill然后移除容器。

默认false。

link - 1 / True / true或0 / False / false,删除

与容器关联的指定链接。默认false。

状态代码:

204 - 没有错误

400 - 参数不好

404 - 没有这样的容器

409 - 冲突

500 - 服务器错误

检索有关容器中的文件和文件夹的信息

HEAD /containers/(id or name)/archive

请参阅 以下部分中X-Docker-Container-Path-Stat标题的说明

获取容器中文件系统资源的归档

GET /containers/(id or name)/archive

获取容器文件系统中资源的tar存档id。

查询参数:

path - 要归档的容器文件系统中的资源。需要。

如果不是绝对路径,则它相对于容器的根目录。path

指定的资源必须存在。要声明资源 应该是一个目录,路径应该以或 (假设路径分隔符)结束。如果path以end结尾,则 表示只应 复制路径目录的内容。符号链接始终解析为其目标。

//.

//.

注:这是不可能复制某些系统文件,如资源

下/proc,/sys,/dev由用户创建,和坐骑

容器。

示例请求:

GET /v1.24/containers/8cce319429b2/archive?path=/root HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/x-tar

X-Docker-Container-Path-Stat: eyJuYW1lIjoicm9vdCIsInNpemUiOjQwOTYsIm1vZGUiOjIxNDc0ODQwOTYsIm10aW1lIjoiMjAxNC0wMi0yN1QyMDo1MToyM1oiLCJsaW5rVGFyZ2V0IjoiIn0=

{% raw %}

{{ TAR STREAM }}

{% endraw %}

成功时,响应头X-Docker-Container-Path-Stat将设置为

base64编码的JSON对象,其中包含有关

已归档资源的一些文件系统头信息。上面的示例值将解码为以下

JSON对象(为了可读性而添加了空白):

{

"name": "root",

"size": 4096,

"mode": 2147484096,

"mtime": "2014-02-27T20:51:23Z",

"linkTarget": ""

}

甲HEAD请求可以只要该信息还可以给该端点作出

期望的。

状态代码:

200 - 成功,返回复制资源的归档

400 - 客户端错误,错误参数,JSON响应正文中的详细信息,其中之一:

必须指定路径参数(路径不能为空)

不是目录(路径被声明为目录但存在为

文件)

404 - 客户端错误,找不到资源,其中之一:

  • 没有这样的容器(容器id不存在) 没有这样的文件或目录(路径不存在) 500 - 服务器错误 将文件或文件夹的存档解压缩到容器中的目录 PUT /containers/(id or name)/archive

将要提取的tar存档上载到容器文件系统中的路径

id。

查询参数:

path - 容器中

用于将存档内容提取到的目录的路径。需要。

如果不是绝对路径,则它相对于容器的根目录。

该路径的资源必须存在。

noOverwriteDirNonDir - 如果“1”,“true”或“True”,那么

如果解压缩给定内容会导致现有目录被

替换为非目录,反之亦然,则会出错。

示例请求:

PUT /v1.24/containers/8cce319429b2/archive?path=/vol1 HTTP/1.1

Content-Type: application/x-tar

{% raw %}

{{ TAR STREAM }}

{% endraw %}

响应示例:

HTTP/1.1 200 OK

状态代码:

200 - 成功提取内容

400 - 客户端错误,错误参数,JSON响应正文中的详细信息,其中之一:

必须指定路径参数(路径不能为空)

不是目录(路径应该是目录,但作为文件存在)

无法使用非目录覆盖现有目录

(如果noOverwriteDirNonDir)

无法用目录覆盖现有的非目录

(如果noOverwriteDirNonDir)

403 - 客户端错误,权限被拒绝,卷

或容器rootfs被标记为只读。

404 - 客户端错误,找不到资源,其中之一:

  • 没有这样的容器(容器id不存在) 没有这样的文件或目录(路径资源不存在) 500 - 服务器错误 3.2图像 列表图像 GET /images/json

示例请求:

GET /v1.24/images/json?all=0 HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

[

{

"RepoTags": [

"ubuntu:12.04",

"ubuntu:precise",

"ubuntu:latest"

],

"Id": "8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c",

"Created": 1365714795,

"Size": 131506275,

"VirtualSize": 131506275,

"Labels": {}

},

{

"RepoTags": [

"ubuntu:12.10",

"ubuntu:quantal"

],

"ParentId": "27cf784147099545",

"Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc",

"Created": 1364102658,

"Size": 24653,

"VirtualSize": 180116135,

"Labels": {

"com.example.version": "v1"

}

}

]

示例请求,带有摘要信息:

GET /v1.24/images/json?digests=1 HTTP/1.1

示例响应,带有摘要信息:

HTTP/1.1 200 OK

Content-Type: application/json

[

{

"Created": 1420064636,

"Id": "4986bf8c15363d1c5d15512d5266f8777bfba4974ac56e3270e7760f6f0a8125",

"ParentId": "ea13149945cb6b1e746bf28032f02e9b5a793523481a0a18645fc77ad53c4ea2",

"RepoDigests": [

"localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf"

],

"RepoTags": [

"localhost:5000/test/busybox:latest",

"playdate:latest"

],

"Size": 0,

"VirtualSize": 2429728,

"Labels": {}

}

]

响应显示Id与两个存储库

(RepoTags)相关联的单个图像localhost:5000/test/busybox:和playdate。调用者可以使用

其中任何一个RepoTags值localhost:5000/test/busybox:latest或

playdate:latest引用该图像。

您还可以使用RepoDigests值来引用图像。在此响应中,

数组只有一个引用,即

localhost:5000/test/busybox存储库; 该playdate仓库有没有

消化。您可以使用以下值来引用此摘要:

localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d...

有关 命令行上的摘要和标记引用的示例,请参阅docker run和docker build命令

查询参数:

all - 1 / True / true或0 / False / false,默认为false

filters - 要在图像列表上处理的过滤器的JSON编码值(map [string] [] string)。可用过滤器:

dangling=true

label=key或label="key=value"图像标签

before=([:], 或 image@digest

since=([:], 或 image@digest

filter - 仅返回具有指定名称的图像

从Dockerfile构建映像

POST /build

从Dockerfile构建映像

示例请求:

POST /v1.24/build HTTP/1.1

Content-Type: application/x-tar

{% raw %}

{{ TAR STREAM }}

{% endraw %}

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

{"stream": "Step 1/5..."}

{"stream": "..."}

{"error": "Error...", "errorDetail": {"code": 123, "message": "Error..."}}

输入流必须是tar与该一个压缩存档

以下算法:identity(无压缩), ,gzip,。bzip2xz

存档必须包含构建指令文件,通常

Dockerfile在存档的根目录中调用。该dockerfile参数可

用于指定不同的构建指令文件。为此,其值必须是

要使用的备用生成指令文件的路径。

存档可以包含任何数量的其他文件,

这些文件可以在构建上下文中访问(请参阅ADD构建

命令)。

Docker守护程序Dockerfile在

开始构建之前执行初步验证,如果语法不正确则返回错误。之后,

每个指令一个接一个地运行,直到输出新图像的ID。

如果客户端通过退出

或被杀死而断开连接,则构建将被取消。

查询参数:

dockerfile - 构建上下文中的路径Dockerfile。

如果remote指定并且指向外部,则忽略此项Dockerfile。

t - 以name:tag格式应用于图像的名称和可选标记。

如果省略,则假定tag为默认latest值。

您可以提供一个或多个t参数。

remote - Git存储库URI或HTTP / HTTPS上下文URI。如果

URI指向单个文本文件,则将文件的内容放入

调用的文件中,Dockerfile并从该文件构建映像。如果

URI指向tarball,则守护程序

将下载该文件,其中的内容将用作构建的上下文。如果URI

指向tarball并且dockerfile还指定了参数,

则必须在tarball中包含具有相应路径的文件。

q - 抑制详细的构建输出。

nocache - 构建映像时不要使用缓存。

pull - 即使本地存在较旧的图像,也尝试拉取图像。

rm - 成功构建后删除中间容器(默认行为)。

forcerm - 始终移除中间容器(包括rm)。

memory - 设置内存限制。

memswap - 总内存(内存+交换),-1启用无限制交换。

cpushares - CPU份额(相对权重)。

cpusetcpus - 允许执行的CPU(例如0-3,0,1)。

cpuperiod - CPU周期的长度,以微秒为单位。

cpuquota - 容器在CPU周期内可以获得的CPU时间的微秒数。

buildargs - 构建时变量的字符串对的JSON映射。用户

在构建时传递这些值。Docker使用 通过Dockerfile 指令运行的命令buildargs的环境

上下文RUN或

其他Dockerfile指令中的变量扩展。这不是为了

传递秘密值。阅读有关buildargs指令的更多信息

shmsize - /dev/shm以字节为单位的大小。大小必须大于0.如果省略,系统使用64MB。

labels - 要在图像上设置的标签的字符串对的JSON映射。

请求标题:

内容类型 - 设置为"application/x-tar"。

X-Registry-Config -

具有以下结构的base64-url-safe编码的Registry Auth Config JSON 对象:

{
    "docker.example.com": {
        "username": "janedoe",
        "password": "hunter2"
    },
    "https://index.docker.io/v1/": {
        "username": "mobydock",
        "password": "conta1n3rize14"
    }
}

此对象将注册表的主机名映射到包含该注册表的

“用户名”和“密码” 的对象。

可以指定多个注册表,因为构建可以基于需要

认证从任何任意注册表中提取的图像。只需要注册

域名(和端口,如果不是默认的“443”)。但是

(由于遗留原因)“官方”Docker,Inc。托管注册表必须

同时指定“https://”前缀和“/ v1 /”后缀,即使

Docker更喜欢使用v2注册表API。

状态代码:

200 - 没有错误

500 - 服务器错误

创建一个图像

POST /images/create

通过从注册表中提取图像或导入图像来创建图像

示例请求:

POST /v1.24/images/create?fromImage=busybox&tag=latest HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

{"status": "Pulling..."}

{"status": "Pulling", "progress": "1 B/ 100 B", "progressDetail": {"current": 1, "total": 100}}

{"error": "Invalid..."}

...

使用此端点从注册表中提取图像时,

X-Registry-Auth标头可用于包含

base64编码的AuthConfig对象。

查询参数:

fromImage - 要拉的图像的名称。名称可以包括标签或

摘要。此参数仅在拉动图像时使用。

如果HTTP连接关闭,则取消拉取。

fromSrc - 要导入的源。该值可以是

可以从中检索图像的URL 或-从请求主体读取图像的URL 。

此参数仅在导入图像时使用。

repo - 导入时为图像指定的存储库名称。

回购可能包括标签。此参数仅在导入

图像时使用。

tag - 标记或摘要。如果在拉动图像时为空,则会导致

拉出给定图像的所有标签。

请求标题:

X-Registry-Auth -base64编码的AuthConfig对象,包含登录信息或令牌

基于凭据的登录:

{

“username”:“jdoe”,

“password”:“secret”,

“email”:“jdoe @ acme.com ”

}

基于令牌的登录:

{ 
“identitytoken”:“9cbaf023786cd7 ...” 
}

状态代码:

200 - 没有错误

404 - 存储库不存在或没有读访问权限

500 - 服务器错误

检查图像

GET /images/(name)/json

返回图像的低级信息 name

示例请求:

GET /v1.24/images/example/json HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

{

"Id" : "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c",

"Container" : "cb91e48a60d01f1e27028b4fc6819f4f290b3cf12496c8176ec714d0d390984a",

"Comment" : "",

"Os" : "linux",

"Architecture" : "amd64",

"Parent" : "sha256:91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c",

"ContainerConfig" : {

"Tty" : false,

"Hostname" : "e611e15f9c9d",

"Volumes" : null,

"Domainname" : "",

"AttachStdout" : false,

"PublishService" : "",

"AttachStdin" : false,

"OpenStdin" : false,

"StdinOnce" : false,

"NetworkDisabled" : false,

"OnBuild" : [],

"Image" : "91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c",

"User" : "",

"WorkingDir" : "",

"Entrypoint" : null,

"MacAddress" : "",

"AttachStderr" : false,

"Labels" : {

"com.example.license" : "GPL",

"com.example.version" : "1.0",

"com.example.vendor" : "Acme"

},

"Env" : [

"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

],

"ExposedPorts" : null,

"Cmd" : [

"/bin/sh",

"-c",

"#(nop) LABEL com.example.vendor=Acme com.example.license=GPL com.example.version=1.0"

]

},

"DockerVersion" : "1.9.0-dev",

"VirtualSize" : 188359297,

"Size" : 0,

"Author" : "",

"Created" : "2015-09-10T08:30:53.26995814Z",

"GraphDriver" : {

"Name" : "aufs",

"Data" : null

},

"RepoDigests" : [

"localhost:5000/test/busybox/example@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf"

],

"RepoTags" : [

"example:1.0",

"example:latest",

"example:stable"

],

"Config" : {

"Image" : "91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c",

"NetworkDisabled" : false,

"OnBuild" : [],

"StdinOnce" : false,

"PublishService" : "",

"AttachStdin" : false,

"OpenStdin" : false,

"Domainname" : "",

"AttachStdout" : false,

"Tty" : false,

"Hostname" : "e611e15f9c9d",

"Volumes" : null,

"Cmd" : [

"/bin/bash"

],

"ExposedPorts" : null,

"Env" : [

"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

],

"Labels" : {

"com.example.vendor" : "Acme",

"com.example.version" : "1.0",

"com.example.license" : "GPL"

},

"Entrypoint" : null,

"MacAddress" : "",

"AttachStderr" : false,

"WorkingDir" : "",

"User" : ""

},

"RootFS": {

"Type": "layers",

"Layers": [

"sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6",

"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef"

]

}

}

状态代码:

200 - 没有错误

404 - 没有这样的形象

500 - 服务器错误

获取图像的历史记录

GET /images/(name)/history

返回图像的历史记录 name

示例请求:

GET /v1.24/images/ubuntu/history HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

[

{

"Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710",

"Created": 1398108230,

"CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /",

"Tags": [

"ubuntu:lucid",

"ubuntu:10.04"

],

"Size": 182964289,

"Comment": ""

},

{

"Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8",

"Created": 1398108222,

"CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi admwiggin@gmail.com - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/ ",

"Tags": null,

"Size": 0,

"Comment": ""

},

{

"Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158",

"Created": 1371157430,

"CreatedBy": "",

"Tags": [

"scratch12:latest",

"scratch:latest"

],

"Size": 0,

"Comment": "Imported from -"

}

]

状态代码:

200 - 没有错误

404 - 没有这样的形象

500 - 服务器错误

在注册表上推送图像

POST /images/(name)/push

name在注册表上推送图像

示例请求:

POST /v1.24/images/test/push HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

{"status": "Pushing..."}

{"status": "Pushing", "progress": "1/? (n/a)", "progressDetail": {"current": 1}}}

{"error": "Invalid..."}

...

如果你想在一个私人注册推的图像,该图像必须已经有一个标签

在其中引用注册表中的库hostname和port。

然后应在URL中使用此存储库名称。这会复制命令行的流程。

如果HTTP连接关闭,则取消推送。

示例请求:

POST /v1.24/images/registry.acme.com:5000/test/push HTTP/1.1

查询参数:

tag - 与注册表上的图像关联的标记。这是可选的。

请求标题:

X-Registry-Auth -base64编码的AuthConfig对象,包含登录信息或令牌

基于凭据的登录:

{

“username”:“jdoe”,

“password”:“secret”,

“email”:“jdoe @ acme.com ”,

}

基于身份令牌的登录:

{ 
“identitytoken”:“9cbaf023786cd7 ...” 
}

状态代码:

200 - 没有错误

404 - 没有这样的形象

500 - 服务器错误

将图像标记到存储库中

POST /images/(name)/tag

将图像标记name到存储库中

示例请求:

POST /v1.24/images/test/tag?repo=myrepo&tag=v42 HTTP/1.1

响应示例:

HTTP/1.1 201 Created

查询参数:

repo - 要标记的存储库

tag - 新标记名称

状态代码:

201 - 没有错误

400 - 参数不好

404 - 没有这样的形象

409 - 冲突

500 - 服务器错误

删除图像

DELETE /images/(name)

name从文件系统中删除图像

示例请求:

DELETE /v1.24/images/test HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-type: application/json

[

{"Untagged": "3e2f21a89f"},

{"Deleted": "3e2f21a89f"},

{"Deleted": "53b4f83ac9"}

]

查询参数:

force - 1 / True / true或0 / False / false,默认为false

noprune - 1 / True / true或0 / False / false,默认为false

状态代码:

200 - 没有错误

404 - 没有这样的形象

409 - 冲突

500 - 服务器错误

搜索图片

GET /images/search

在Docker Hub上搜索图像。

注意:

响应键已从API v1.6更改为反映

注册服务器发送到 docker 守护程序请求的JSON 。

示例请求:

GET /v1.24/images/search?term=sshd HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

[

{

"description": "",

"is_official": false,

"is_automated": false,

"name": "wma55/u1210sshd",

"star_count": 0

},

{

"description": "",

"is_official": false,

"is_automated": false,

"name": "jdswinbank/sshd",

"star_count": 0

},

{

"description": "",

"is_official": false,

"is_automated": false,

"name": "vgauthier/sshd",

"star_count": 0

}

...

]

查询参数:

术语 - 搜索术语

limit - 最大返回的搜索结果

filters - 要在图像列表上处理的过滤器的JSON编码值(map [string] [] string)。可用过滤器:

stars=

is-automated=(true|false)

is-official=(true|false)

状态代码:

200 - 没有错误

500 - 服务器错误

3.3其他

检查身份验证配置

POST /auth

验证注册表的凭据并获取身份令牌(

如果可用),以便在没有密码的情况下访问注册表。

示例请求:

POST /v1.24/auth HTTP/1.1

Content-Type: application/json

Content-Length: 12345

{

"username": "hannibal",

"password": "xxxx",

"serveraddress": " https://index.docker.io/v1/ "

}

响应示例:

HTTP/1.1 200 OK

{

"Status": "Login Succeeded",

"IdentityToken": "9cbaf023786cd7..."

}

状态代码:

200 - 没有错误

204 - 没有错误

500 - 服务器错误

显示系统范围的信息

GET /info

显示系统范围的信息

示例请求:

GET /v1.24/info HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

{

"Architecture": "x86_64",

"ClusterStore": "etcd://localhost:2379",

"CgroupDriver": "cgroupfs",

"Containers": 11,

"ContainersRunning": 7,

"ContainersStopped": 3,

"ContainersPaused": 1,

"CpuCfsPeriod": true,

"CpuCfsQuota": true,

"Debug": false,

"DockerRootDir": "/var/lib/docker",

"Driver": "btrfs",

"DriverStatus": [[""]],

"ExperimentalBuild": false,

"HttpProxy": " http://test:test@localhost:8080 ",

"HttpsProxy": " https://test:test@localhost:8080 ",

"ID": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS",

"IPv4Forwarding": true,

"Images": 16,

"IndexServerAddress": " https://index.docker.io/v1/ ",

"InitPath": "/usr/bin/docker",

"InitSha1": "",

"KernelMemory": true,

"KernelVersion": "3.12.0-1-amd64",

"Labels": [

"storage=ssd"

],

"MemTotal": 2099236864,

"MemoryLimit": true,

"NCPU": 1,

"NEventsListener": 0,

"NFd": 11,

"NGoroutines": 21,

"Name": "prod-server-42",

"NoProxy": "9.81.1.160",

"OomKillDisable": true,

"OSType": "linux",

"OperatingSystem": "Boot2Docker",

"Plugins": {

"Volume": [

"local"

],

"Network": [

"null",

"host",

"bridge"

]

},

"RegistryConfig": {

"IndexConfigs": {

"docker.io": {

"Mirrors": null,

"Name": "docker.io",

"Official": true,

"Secure": true

}

},

"InsecureRegistryCIDRs": [

"127.0.0.0/8"

]

},

"SecurityOptions": [

"apparmor",

"seccomp",

"selinux"

],

"ServerVersion": "1.9.0",

"SwapLimit": false,

"SystemStatus": [["State", "Healthy"]],

"SystemTime": "2015-03-10T11:11:23.730591467-07:00"

}

状态代码:

200 - 没有错误

500 - 服务器错误

显示泊坞窗版本信息

GET /version

显示泊坞窗版本信息

示例请求:

GET /v1.24/version HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

{

"Version": "1.12.0",

"Os": "linux",

"KernelVersion": "3.19.0-23-generic",

"GoVersion": "go1.6.3",

"GitCommit": "deadbee",

"Arch": "amd64",

"ApiVersion": "1.24",

"BuildTime": "2016-06-14T07:09:13.444803460+00:00",

"Experimental": true

}

状态代码:

200 - 没有错误

500 - 服务器错误

Ping docker服务器

GET /_ping

Ping docker服务器

示例请求:

GET /v1.24/_ping HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: text/plain

OK

状态代码:

200 - 没有错误

500 - 服务器错误

根据容器的更改创建新图像

POST /commit

根据容器的更改创建新图像

示例请求:

POST /v1.24/commit?container=44c004db4b17&comment=message&repo=myrepo HTTP/1.1

Content-Type: application/json

Content-Length: 12345

{

"Hostname": "",

"Domainname": "",

"User": "",

"AttachStdin": false,

"AttachStdout": true,

"AttachStderr": true,

"Tty": false,

"OpenStdin": false,

"StdinOnce": false,

"Env": null,

"Cmd": [

"date"

],

"Mounts": [

{

"Source": "/data",

"Destination": "/data",

"Mode": "ro,Z",

"RW": false

}

],

"Labels": {

"key1": "value1",

"key2": "value2"

},

"WorkingDir": "",

"NetworkDisabled": false,

"ExposedPorts": {

"22/tcp": {}

}

}

响应示例:

HTTP/1.1 201 Created

Content-Type: application/json

{"Id": "596069db4bf5"}

JSON参数:

config - 容器的配置

查询参数:

容器 - 源容器

repo - 存储库

标签标签-

评论 - 提交消息

作者 - 作者(例如,“John Hannibal Smith

< hannibal@a-team.com >”)

pause - 1 / True / true或0 / False / false,是否在提交前暂停容器

更改 - 提交时应用的Dockerfile指令

状态代码:

201 - 没有错误

404 - 没有这样的容器

500 - 服务器错误

监视Docker的事件

GET /events

通过流媒体实时从docker获取容器事件。

Docker容器报告以下事件:

attach, commit, copy, create, destroy, detach, die, exec_create, exec_detach, exec_start, export, health_status, kill, oom, pause, rename, resize, restart, start, stop, top, unpause, update

Docker镜像报告以下事件:

delete, import, load, pull, push, save, tag, untag

Docker卷报告以下事件:

create, mount, unmount, destroy

Docker网络报告以下事件:

create, connect, disconnect, destroy

Docker守护程序报告以下事件:

reload

示例请求:

GET /v1.24/events?since=1374067924

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

Server: Docker/1.12.0 (linux)

Date: Fri, 29 Apr 2016 15:18:06 GMT

Transfer-Encoding: chunked

{

"status": "pull",

"id": "alpine:latest",

"Type": "image",

"Action": "pull",

"Actor": {

"ID": "alpine:latest",

"Attributes": {

"name": "alpine"

}

},

"time": 1461943101,

"timeNano": 1461943101301854122

}

{

"status": "create",

"id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",

"from": "alpine",

"Type": "container",

"Action": "create",

"Actor": {

"ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",

"Attributes": {

"com.example.some-label": "some-label-value",

"image": "alpine",

"name": "my-container"

}

},

"time": 1461943101,

"timeNano": 1461943101381709551

}

{

"status": "attach",

"id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",

"from": "alpine",

"Type": "container",

"Action": "attach",

"Actor": {

"ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",

"Attributes": {

"com.example.some-label": "some-label-value",

"image": "alpine",

"name": "my-container"

}

},

"time": 1461943101,

"timeNano": 1461943101383858412

}

{

"Type": "network",

"Action": "connect",

"Actor": {

"ID": "7dc8ac97d5d29ef6c31b6052f3938c1e8f2749abbd17d1bd1febf2608db1b474",

"Attributes": {

"container": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",

"name": "bridge",

"type": "bridge"

}

},

"time": 1461943101,

"timeNano": 1461943101394865557

}

{

"status": "start",

"id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",

"from": "alpine",

"Type": "container",

"Action": "start",

"Actor": {

"ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",

"Attributes": {

"com.example.some-label": "some-label-value",

"image": "alpine",

"name": "my-container"

}

},

"time": 1461943101,

"timeNano": 1461943101607533796

}

{

"status": "resize",

"id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",

"from": "alpine",

"Type": "container",

"Action": "resize",

"Actor": {

"ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",

"Attributes": {

"com.example.some-label": "some-label-value",

"height": "46",

"image": "alpine",

"name": "my-container",

"width": "204"

}

},

"time": 1461943101,

"timeNano": 1461943101610269268

}

{

"status": "die",

"id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",

"from": "alpine",

"Type": "container",

"Action": "die",

"Actor": {

"ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",

"Attributes": {

"com.example.some-label": "some-label-value",

"exitCode": "0",

"image": "alpine",

"name": "my-container"

}

},

"time": 1461943105,

"timeNano": 1461943105079144137

}

{

"Type": "network",

"Action": "disconnect",

"Actor": {

"ID": "7dc8ac97d5d29ef6c31b6052f3938c1e8f2749abbd17d1bd1febf2608db1b474",

"Attributes": {

"container": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",

"name": "bridge",

"type": "bridge"

}

},

"time": 1461943105,

"timeNano": 1461943105230860245

}

{

"status": "destroy",

"id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",

"from": "alpine",

"Type": "container",

"Action": "destroy",

"Actor": {

"ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",

"Attributes": {

"com.example.some-label": "some-label-value",

"image": "alpine",

"name": "my-container"

}

},

"time": 1461943105,

"timeNano": 1461943105338056026

}

查询参数:

自 - 时间戳。显示自时间戳后创建的所有事件,然后流式传输

直到 - 时间戳。显示创建的事件,直到给定时间戳并停止流式传输

filters - 要在事件列表上处理的过滤器的json编码值(map [string] [] string)。可用过滤器:

container=; - 要过滤的容器

event=; - 过滤事件

image=; - 图像过滤

label=; - 要过滤的图像和容器标签

type=; - container或者image或者volume或者network或者daemon

volume=; - 过滤量

network=; - 网络过滤

daemon=; - 要过滤的守护程序名称或ID

状态代码:

200 - 没有错误

400 - 参数不好

500 - 服务器错误

获取包含存储库中所有图像的tarball

GET /images/(name)/get

获取包含指定库中的所有图像和元数据的压缩包

通过name。

如果name是特定的名称和标记(例如ubuntu:latest),则仅返回该图像

(及其父项)。如果name是图像ID,则类似地仅返回该

图像(及其父项),但是

在tarball中排除了“存储库”文件,因为没有引用的图像名称。

有关详细信息,请参阅图像tarball格式。

示例请求

GET /v1.24/images/ubuntu/get

响应示例:

HTTP/1.1 200 OK

Content-Type: application/x-tar

Binary data stream

状态代码:

200 - 没有错误

500 - 服务器错误

获取包含所有图像的tarball

GET /images/get

获取包含一个或多个存储库的所有图像和元数据的tarball。

对于names参数的每个值:如果它是特定名称和标记(例如

ubuntu:latest),则仅返回该图像(及其父项); 如果它是

图像ID,则类似地仅返回该图像(及其父项),并且

在该“图像ID”的“存储库”文件中不会引用任何名称。

有关详细信息,请参阅图像tarball格式。

示例请求

GET /v1.24/images/get?names=myname%2Fmyapp%3Alatest&names=busybox

响应示例:

HTTP/1.1 200 OK

Content-Type: application/x-tar

Binary data stream

状态代码:

200 - 没有错误

500 - 服务器错误

将带有一组图像和标记的tarball加载到docker中

POST /images/load

将一组图像和标记加载到Docker存储库中。

有关详细信息,请参阅图像tarball格式。

示例请求

POST /v1.24/images/load

Content-Type: application/x-tar

Content-Length: 12345

Tarball in body

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

Transfer-Encoding: chunked

{"status":"Loading layer","progressDetail":{"current":32768,"total":1292800},"progress":"[=                                                 ] 32.77 kB/1.293 MB","id":"8ac8bfaff55a"}

{"status":"Loading layer","progressDetail":{"current":65536,"total":1292800},"progress":"[==                                                ] 65.54 kB/1.293 MB","id":"8ac8bfaff55a"}

{"status":"Loading layer","progressDetail":{"current":98304,"total":1292800},"progress":"[===                                               ]  98.3 kB/1.293 MB","id":"8ac8bfaff55a"}

{"status":"Loading layer","progressDetail":{"current":131072,"total":1292800},"progress":"[=====                                             ] 131.1 kB/1.293 MB","id":"8ac8bfaff55a"}

...

{"stream":"Loaded image: busybox:latest\n"}

响应示例:

如果将“quiet”查询参数设置为true/ 1(?quiet=1),

则会抑制进度详细信息,并且只有在

操作完成后才会返回确认消息。

HTTP/1.1 200 OK

Content-Type: application/json

Transfer-Encoding: chunked

{"stream":"Loaded image: busybox:latest\n"}

查询参数:

quiet - 布尔值,在加载期间抑制进度详细信息。默认

为0/ false如果省略。

状态代码:

200 - 没有错误

500 - 服务器错误

图像tarball格式

图像tarball包含每个图像层一个目录(使用其长ID命名),

每个目录包含以下文件:

VERSION:当前1.0- 文件格式版本

json:详细的图层信息,类似于 docker inspect layer_id

layer.tar:包含文件系统的tarfile在此层中发生更改

该layer.tar文件包含 用于存储属性更改和删除的aufs样式.wh..wh.aufs文件和目录

如果tarball定义了存储库,则tarball还应该repositories在

根目录中包含一个文件,该文件包含映射到层ID的存储库和标记名称列表。

{"hello-world":

{"latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1"}

}

执行创建

POST /containers/(id or name)/exec

在正在运行的容器中设置exec实例 id

示例请求:

POST /v1.24/containers/e90e34656806/exec HTTP/1.1

Content-Type: application/json

Content-Length: 12345

{

"AttachStdin": true,

"AttachStdout": true,

"AttachStderr": true,

"Cmd": ["sh"],

"DetachKeys": "ctrl-p,ctrl-q",

"Privileged": true,

"Tty": true,

"User": "123:456"

}

响应示例:

HTTP/1.1 201 Created

Content-Type: application/json

{

"Id": "f90e34656806",

"Warnings":[]

}

JSON参数:

AttachStdin -布尔值,重视stdin对的exec命令。

AttachStdout -布尔值,重视stdout对的exec命令。

AttachStderr -布尔值,重视stderr对的exec命令。

DetachKeys - 覆盖用于分离

容器的键序列。格式是一个单独的字符[a-Z]或ctrl-

其中是下列之一:a-z,@,^,[,,或_。

Tty - 分配伪TTY的布尔值。

Cmd - 要指定为字符串或字符串数​​组的命令。

Privileged - 布尔值,使用扩展权限运行exec进程。

User - 一个字符串值,指定用户,以及可选的组,以

在容器内运行exec进程。格式是一个:"user",

"user:group","uid",或"uid:gid"。

状态代码:

201 - 没有错误

404 - 没有这样的容器

409 - 容器暂停

500 - 服务器错误

Exec Start

POST /exec/(id)/start

启动先前设置的exec实例id。如果detach为true,则

在启动exec命令后返回此API 。否则,此API将

使用该exec命令设置交互式会话。

示例请求:

POST /v1.24/exec/e90e34656806/start HTTP/1.1

Content-Type: application/json

Content-Length: 12345

{

"Detach": false,

"Tty": false

}

响应示例:

HTTP/1.1 200 OK

Content-Type: application/vnd.docker.raw-stream

{% raw %}

{{ STREAM }}

{% endraw %}

JSON参数:

分离 - 从exec命令中分离。

Tty - 分配伪TTY的布尔值。

状态代码:

200 - 没有错误

404 - 没有这样的exec实例

409 - 容器暂停

流细节:

类似于POST /containers/(id or name)/attachAPI 的流行为

Exec调整大小

POST /exec/(id)/resize

调整命令tty使用的会话的大小。单位是字符数。 仅当指定为创建和启动命令的一部分时,此API才有效。execid

ttyexec

示例请求:

POST /v1.24/exec/e90e34656806/resize?h=40&w=80 HTTP/1.1

Content-Type: text/plain

响应示例:

HTTP/1.1 201 Created

Content-Type: text/plain

查询参数:

h - tty会话高度

w - 宽度

状态代码:

201 - 没有错误

404 - 没有这样的exec实例

Exec Inspect

GET /exec/(id)/json

返回有关该exec命令的低级信息id。

示例请求:

GET /v1.24/exec/11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39/json HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

{

"CanRemove": false,

"ContainerID": "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126",

"DetachKeys": "",

"ExitCode": 2,

"ID": "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b",

"OpenStderr": true,

"OpenStdin": true,

"OpenStdout": true,

"ProcessConfig": {

"arguments": [

"-c",

"exit 2"

],

"entrypoint": "sh",

"privileged": false,

"tty": true,

"user": "1000"

},

"Running": false

}

状态代码:

200 - 没有错误

404 - 没有这样的exec实例

500 - 服务器错误

3.4卷

列出卷

GET /volumes

示例请求:

GET /v1.24/volumes HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

{

"Volumes": [

{

"Name": "tardis",

"Driver": "local",

"Mountpoint": "/var/lib/docker/volumes/tardis",

"Labels": null,

"Scope": "local"

}

],

"Warnings": []

}

查询参数:

filters - 过滤器的 JSON编码值(a map[string][]string)在卷列表上处理。可用过滤器:

name= 匹配卷名的全部或部分。

dangling=设置为true(或1)时,返回“悬空”(未被容器使用)的所有卷。设置为false(或0)时,仅返回一个或多个容器正在使用的卷。

driver= 匹配卷驱动程序名称的全部或部分内容。

状态代码:

200 - 没有错误

500 - 服务器错误

创建一个卷

POST /volumes/create

创建一个卷

示例请求:

POST /v1.24/volumes/create HTTP/1.1

Content-Type: application/json

Content-Length: 12345

{

"Name": "tardis",

"Labels": {

"com.example.some-label": "some-value",

"com.example.some-other-label": "some-other-value"

},

"Driver": "custom"

}

响应示例:

HTTP/1.1 201 Created

Content-Type: application/json

{

"Name": "tardis",

"Driver": "custom",

"Mountpoint": "/var/lib/docker/volumes/tardis",

"Status": {

"hello": "world"

},

"Labels": {

"com.example.some-label": "some-value",

"com.example.some-other-label": "some-other-value"

},

"Scope": "local"

}

状态代码:

201 - 没有错误

500 - 服务器错误

JSON参数:

名称 - 新卷的名称。如果未指定,Docker将生成一个名称。

驱动程序 - 要使用的卷驱动程序的名称。默认local为名称。

DriverOpts - 驱动程序选项和值的映射。这些选项

直接传递给驱动程序,并且是特定于驱动程序的。

标签 - 在卷上设置的标签,指定为地图:{"key":"value","key2":"value2"}

响应中的JSON字段:

请参阅检查卷部分或有关

响应中返回的JSON字段的详细信息。

检查音量

GET /volumes/(name)

返回卷上的低级信息 name

示例请求:

GET /v1.24/volumes/tardis

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

{

"Name": "tardis",

"Driver": "custom",

"Mountpoint": "/var/lib/docker/volumes/tardis/_data",

"Status": {

"hello": "world"

},

"Labels": {

"com.example.some-label": "some-value",

"com.example.some-other-label": "some-other-value"

},

"Scope": "local"

}

状态代码:

200 - 没有错误

404 - 没有这样的音量

500 - 服务器错误

响应中的JSON字段:

API响应中可以返回以下字段。

可以在

响应中省略空字段或卷的驱动程序不支持的字段。

名称 - 卷的名称。

驱动程序 - 卷使用的卷驱动程序的名称。

Mountpoint - 主机上卷的安装路径。

状态 - 卷驱动程序提供的有关卷的低级详细信息。

详细信息将作为带有键/值对的映射返回:{"key":"value","key2":"value2"}。

该Status字段是可选字段,如果卷驱动程序不

支持此功能,则省略该字段。

标签 - 在卷上设置的标签,指定为地图:{"key":"value","key2":"value2"}。

范围 - 范围描述卷存在的级别,可以是

global群集范围或local计算机级别之一。默认是local。

删除卷

DELETE /volumes/(name)

指示驱动程序删除卷(name)。

示例请求:

DELETE /v1.24/volumes/tardis HTTP/1.1

响应示例:

HTTP/1.1 204 No Content

状态代码:

204 - 没有错误

404 - 没有这样的音量或音量驱动程序

409 - 卷正在使用中,无法删除

500 - 服务器错误

3.5网络

列出网络

GET /networks

示例请求:

GET /v1.24/networks?filters={"type":{"custom":true}} HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

[

{

"Name": "bridge",

"Id": "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566",

"Scope": "local",

"Driver": "bridge",

"EnableIPv6": false,

"Internal": false,

"IPAM": {

"Driver": "default",

"Config": [

{

"Subnet": "172.17.0.0/16"

}

]

},

"Containers": {

"39b69226f9d79f5634485fb236a23b2fe4e96a0a94128390a7fbbcc167065867": {

"EndpointID": "ed2419a97c1d9954d05b46e462e7002ea552f216e9b136b80a7db8d98b442eda",

"MacAddress": "02:42:ac:11:00:02",

"IPv4Address": "172.17.0.2/16",

"IPv6Address": ""

}

},

"Options": {

"com.docker.network.bridge.default_bridge": "true",

"com.docker.network.bridge.enable_icc": "true",

"com.docker.network.bridge.enable_ip_masquerade": "true",

"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",

"com.docker.network.bridge.name": "docker0",

"com.docker.network.driver.mtu": "1500"

}

},

{

"Name": "none",

"Id": "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794",

"Scope": "local",

"Driver": "null",

"EnableIPv6": false,

"Internal": false,

"IPAM": {

"Driver": "default",

"Config": []

},

"Containers": {},

"Options": {}

},

{

"Name": "host",

"Id": "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e",

"Scope": "local",

"Driver": "host",

"EnableIPv6": false,

"Internal": false,

"IPAM": {

"Driver": "default",

"Config": []

},

"Containers": {},

"Options": {}

}

]

查询参数:

filters - JSON编码的网络列表过滤器。过滤器值是以下之一:

driver= 匹配网络的驱动程序。

id= 匹配网络ID的全部或部分内容。

label=或label==网络标签。

name= 匹配全部或部分网络名称。

type=["custom"|"builtin"]按类型过滤网络。该custom关键字返回所有用户定义的网络。

状态代码:

200 - 没有错误

500 - 服务器错误

检查网络

GET /networks/(id or name)

返回网络上的低级信息 id

示例请求:

GET /v1.24/networks/7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99 HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

{

"Name": "net01",

"Id": "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99",

"Scope": "local",

"Driver": "bridge",

"EnableIPv6": false,

"IPAM": {

"Driver": "default",

"Config": [

{

"Subnet": "172.19.0.0/16",

"Gateway": "172.19.0.1"

}

],

"Options": {

"foo": "bar"

}

},

"Internal": false,

"Containers": {

"19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c": {

"Name": "test",

"EndpointID": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a",

"MacAddress": "02:42:ac:13:00:02",

"IPv4Address": "172.19.0.2/16",

"IPv6Address": ""

}

},

"Options": {

"com.docker.network.bridge.default_bridge": "true",

"com.docker.network.bridge.enable_icc": "true",

"com.docker.network.bridge.enable_ip_masquerade": "true",

"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",

"com.docker.network.bridge.name": "docker0",

"com.docker.network.driver.mtu": "1500"

},

"Labels": {

"com.example.some-label": "some-value",

"com.example.some-other-label": "some-other-value"

}

}

状态代码:

200 - 没有错误

404 - 找不到网络

500 - 服务器错误

创建一个网络

POST /networks/create

创建一个网络

示例请求:

POST /v1.24/networks/create HTTP/1.1

Content-Type: application/json

Content-Length: 12345

{

"Name":"isolated_nw",

"CheckDuplicate":true,

"Driver":"bridge",

"EnableIPv6": true,

"IPAM":{

"Driver": "default",

"Config":[

{

"Subnet":"172.20.0.0/16",

"IPRange":"172.20.10.0/24",

"Gateway":"172.20.10.11"

},

{

"Subnet":"2001:db8:abcd::/64",

"Gateway":"2001:db8:abcd::1011"

}

],

"Options": {

"foo": "bar"

}

},

"Internal":true,

"Options": {

"com.docker.network.bridge.default_bridge": "true",

"com.docker.network.bridge.enable_icc": "true",

"com.docker.network.bridge.enable_ip_masquerade": "true",

"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",

"com.docker.network.bridge.name": "docker0",

"com.docker.network.driver.mtu": "1500"

},

"Labels": {

"com.example.some-label": "some-value",

"com.example.some-other-label": "some-other-value"

}

}

响应示例:

HTTP/1.1 201 Created

Content-Type: application/json

{

"Id": "22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30",

"Warning": ""

}

状态代码:

201 - 没有错误

403-预定义网络不支持操作

404 - 找不到插件

500 - 服务器错误

JSON参数:

名称 - 新网络的名称。这是一个必填字段

CheckDuplicate - 请求守护程序检查具有相同名称的网络。默认为false。

由于网络主要基于随机ID而不是名称来键控,

并且网络名称严格

地是使用ID唯一标识的网络的用户友好别名,因此无法保证检查重复项。

此参数CheckDuplicate用于提供对

具有相同名称但不保证捕获所有名称冲突的任何网络的尽力检查。

Driver - 要使用的网络驱动程序插件的名称。默认为bridge驱动程序

内部 - 限制对网络的外部访问

IPAM - 网络的可选自定义IP方案

Driver - 要使用的IPAM驱动程序的名称。默认为default驱动程序

配置 - 指定为映射的IPAM配置选项列表:

{"Subnet": , "IPRange": , "Gateway": , "AuxAddress": <device_name:IP address>}

选项 - 指定为地图的特定于驱动程序的选项:{"option":"value" [,"option2":"value2"]}

EnableIPv6 - 在网络上启用IPv6

选项 - 驱动程序要使用的网络特定选项

标签 - 在网络上设置的标签,指定为地图:{"key":"value" [,"key2":"value2"]}

将容器连接到网络

POST /networks/(id or name)/connect

将容器连接到网络

示例请求:

POST /v1.24/networks/22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30/connect HTTP/1.1

Content-Type: application/json

Content-Length: 12345

{

"Container":"3613f73ba0e4",

"EndpointConfig": {

"IPAMConfig": {

"IPv4Address":"172.24.56.89",

"IPv6Address":"2001:db8::5689"

}

}

}

响应示例:

HTTP/1.1 200 OK

状态代码:

200 - 没有错误

403-群范围网络不支持操作

404 - 找不到网络或容器

500 - 内部服务器错误

JSON参数:

container - 要连接到网络的container-id / name

断开容器与网络的连接

POST /networks/(id or name)/disconnect

断开容器与网络的连接

示例请求:

POST /v1.24/networks/22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30/disconnect HTTP/1.1

Content-Type: application/json

Content-Length: 12345

{

"Container":"3613f73ba0e4",

"Force":false

}

响应示例:

HTTP/1.1 200 OK

状态代码:

200 - 没有错误

403-群范围网络不支持操作

404 - 找不到网络或容器

500 - 内部服务器错误

JSON参数:

容器 - 要从网络断开的容器ID /名称

强制 - 强制容器与网络断开连接

删除网络

DELETE /networks/(id or name)

指示驱动程序删除网络(id)。

示例请求:

DELETE /v1.24/networks/22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30 HTTP/1.1

响应示例:

HTTP/1.1 204 No Content

状态代码:

204 - 没有错误

403-预定义网络不支持操作

404 - 没有这样的网络

500 - 服务器错误

3.6插件(实验)

列出插件

GET /plugins

返回有关已安装插件的信息。

示例请求:

GET /v1.24/plugins HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

[

{

"Id": "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078",

"Name": "tiborvass/no-remove",

"Tag": "latest",

"Active": true,

"Config": {

"Mounts": [

{

"Name": "",

"Description": "",

"Settable": null,

"Source": "/data",

"Destination": "/data",

"Type": "bind",

"Options": [

"shared",

"rbind"

]

},

{

"Name": "",

"Description": "",

"Settable": null,

"Source": null,

"Destination": "/foobar",

"Type": "tmpfs",

"Options": null

}

],

"Env": [

"DEBUG=1"

],

"Args": null,

"Devices": null

},

"Manifest": {

"ManifestVersion": "v0",

"Description": "A test plugin for Docker",

"Documentation": " https://docs.docker.com/engine/extend/plugins/ ",

"Interface": {

"Types": [

"docker.volumedriver/1.0"

],

"Socket": "plugins.sock"

},

"Entrypoint": [

"plugin-no-remove",

"/data"

],

"Workdir": "",

"User": {

},

"Network": {

"Type": "host"

},

"Capabilities": null,

"Mounts": [

{

"Name": "",

"Description": "",

"Settable": null,

"Source": "/data",

"Destination": "/data",

"Type": "bind",

"Options": [

"shared",

"rbind"

]

},

{

"Name": "",

"Description": "",

"Settable": null,

"Source": null,

"Destination": "/foobar",

"Type": "tmpfs",

"Options": null

}

],

"Devices": [

{

"Name": "device",

"Description": "a host device to mount",

"Settable": null,

"Path": "/dev/cpu_dma_latency"

}

],

"Env": [

{

"Name": "DEBUG",

"Description": "If set, prints debug messages",

"Settable": null,

"Value": "1"

}

],

"Args": {

"Name": "args",

"Description": "command line arguments",

"Settable": null,

"Value": [

]
  }
}

}

]

状态代码:

200 - 没有错误

500 - 服务器错误

安装插件

POST /plugins/pull?name=

拉动并安装插件。安装插件后,可以

使用POST /plugins/(plugin name)/enable端点启用它。

示例请求:

POST /v1.24/plugins/pull?name=tiborvass/no-remove:latest HTTP/1.1

该:latest标记是可选的,如果省略作为默认。使用

此端点从注册表中提取插件时,X-Registry-Auth标头

可用于包含base64编码的AuthConfig对象。有关更多详细信息,请参阅创建

图像部分。

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

Content-Length: 175

[

{

"Name": "network",

"Description": "",

"Value": [

"host"

]

},

{

"Name": "mount",

"Description": "",

"Value": [

"/data"

]

},

{

"Name": "device",

"Description": "",

"Value": [

"/dev/cpu_dma_latency"

]

}

]

查询参数:

name - 要拉的插件的名称。名称可以包括标签或摘要。

此参数是必需的。

状态代码:

200 - 没有错误

500 - 错误解析引用/不是有效的存储库/标记:存储库

名称必须至少有一个组件

500 - 插件已经存在

检查一个插件

GET /plugins/(plugin name)

返回有关已安装插件的详细信息。

示例请求:

GET /v1.24/plugins/tiborvass/no-remove:latest HTTP/1.1

该:latest标记是可选的,如果省略作为默认。

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

{

"Id": "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078",

"Name": "tiborvass/no-remove",

"Tag": "latest",

"Active": false,

"Config": {

"Mounts": [

{

"Name": "",

"Description": "",

"Settable": null,

"Source": "/data",

"Destination": "/data",

"Type": "bind",

"Options": [

"shared",

"rbind"

]

},

{

"Name": "",

"Description": "",

"Settable": null,

"Source": null,

"Destination": "/foobar",

"Type": "tmpfs",

"Options": null

}

],

"Env": [

"DEBUG=1"

],

"Args": null,

"Devices": null

},

"Manifest": {

"ManifestVersion": "v0",

"Description": "A test plugin for Docker",

"Documentation": " https://docs.docker.com/engine/extend/plugins/ ",

"Interface": {

"Types": [

"docker.volumedriver/1.0"

],

"Socket": "plugins.sock"

},

"Entrypoint": [

"plugin-no-remove",

"/data"

],

"Workdir": "",

"User": {

},

"Network": {

"Type": "host"

},

"Capabilities": null,

"Mounts": [

{

"Name": "",

"Description": "",

"Settable": null,

"Source": "/data",

"Destination": "/data",

"Type": "bind",

"Options": [

"shared",

"rbind"

]

},

{

"Name": "",

"Description": "",

"Settable": null,

"Source": null,

"Destination": "/foobar",

"Type": "tmpfs",

"Options": null

}

],

"Devices": [

{

"Name": "device",

"Description": "a host device to mount",

"Settable": null,

"Path": "/dev/cpu_dma_latency"

}

],

"Env": [

{

"Name": "DEBUG",

"Description": "If set, prints debug messages",

"Settable": null,

"Value": "1"

}

],

"Args": {

"Name": "args",

"Description": "command line arguments",

"Settable": null,

"Value": [

]
}

}

}

状态代码:

200 - 没有错误

404 - 未安装插件

启用插件

POST /plugins/(plugin name)/enable

启用插件

示例请求:

POST /v1.24/plugins/tiborvass/no-remove:latest/enable HTTP/1.1

该:latest标记是可选的,如果省略作为默认。

响应示例:

HTTP/1.1 200 OK

Content-Length: 0

Content-Type: text/plain; charset=utf-8

状态代码:

200 - 没有错误

404 - 未安装插件

500 - 插件已启用

禁用插件

POST /plugins/(plugin name)/disable

禁用插件

示例请求:

POST /v1.24/plugins/tiborvass/no-remove:latest/disable HTTP/1.1

该:latest标记是可选的,如果省略作为默认。

响应示例:

HTTP/1.1 200 OK

Content-Length: 0

Content-Type: text/plain; charset=utf-8

状态代码:

200 - 没有错误

404 - 未安装插件

500 - 插件已被禁用

删除插件

DELETE /plugins/(plugin name)

删除插件

示例请求:

DELETE /v1.24/plugins/tiborvass/no-remove:latest HTTP/1.1

该:latest标记是可选的,如果省略作为默认。

响应示例:

HTTP/1.1 200 OK

Content-Length: 0

Content-Type: text/plain; charset=utf-8

状态代码:

200 - 没有错误

404 - 未安装插件

500 - 插件处于活动状态

3.7节点

注意:节点操作要求引擎成为群组的一部分。

列出节点

GET /nodes

列出节点

示例请求:

GET /v1.24/nodes HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

[

{

"ID": "24ifsmvkjbyhk",

"Version": {

"Index": 8

},

"CreatedAt": "2016-06-07T20:31:11.853781916Z",

"UpdatedAt": "2016-06-07T20:31:11.999868824Z",

"Spec": {

"Name": "my-node",

"Role": "manager",

"Availability": "active"

"Labels": {

"foo": "bar"

}

},

"Description": {

"Hostname": "bf3067039e47",

"Platform": {

"Architecture": "x86_64",

"OS": "linux"

},

"Resources": {

"NanoCPUs": 4000000000,

"MemoryBytes": 8272408576

},

"Engine": {

"EngineVersion": "1.12.0",

"Labels": {

"foo": "bar",

}

"Plugins": [

{

"Type": "Volume",

"Name": "local"

},

{

"Type": "Network",

"Name": "bridge"

}

{

"Type": "Network",

"Name": "null"

}

{

"Type": "Network",

"Name": "overlay"

}

]

}

},

"Status": {

"State": "ready"

},

"ManagerStatus": {

"Leader": true,

"Reachability": "reachable",

"Addr": "172.17.0.2:2377""

}

}

]

查询参数:

filters - map[string][]string要在

节点列表上处理的过滤器(a )的JSON编码值。可用过滤器:

id=

label=

membership=(accepted|pending) name=<node name> role=(manager|worker)

状态代码:

200 - 没有错误

406 - 节点不是群的一部分

500 - 服务器错误

检查节点

GET /nodes/(id or name)

返回节点上的低级信息 id

示例请求:

GET /v1.24/nodes/24ifsmvkjbyhk HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

{

"ID": "24ifsmvkjbyhk",

"Version": {

"Index": 8

},

"CreatedAt": "2016-06-07T20:31:11.853781916Z",

"UpdatedAt": "2016-06-07T20:31:11.999868824Z",

"Spec": {

"Name": "my-node",

"Role": "manager",

"Availability": "active"

"Labels": {

"foo": "bar"

}

},

"Description": {

"Hostname": "bf3067039e47",

"Platform": {

"Architecture": "x86_64",

"OS": "linux"

},

"Resources": {

"NanoCPUs": 4000000000,

"MemoryBytes": 8272408576

},

"Engine": {

"EngineVersion": "1.12.0",

"Labels": {

"foo": "bar",

}

"Plugins": [

{

"Type": "Volume",

"Name": "local"

},

{

"Type": "Network",

"Name": "bridge"

}

{

"Type": "Network",

"Name": "null"

}

{

"Type": "Network",

"Name": "overlay"

}

]

}

},

"Status": {

"State": "ready"

},

"ManagerStatus": {

"Leader": true,

"Reachability": "reachable",

"Addr": "172.17.0.2:2377""

}

}

状态代码:

200 - 没有错误

404 - 没有这样的节点

406 - 节点不是群的一部分

500 - 服务器错误

删除节点

DELETE /nodes/(id or name)

从群中删除节点。

示例请求:

DELETE /v1.24/nodes/24ifsmvkjbyhk HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Length: 0

Content-Type: text/plain; charset=utf-8

查询参数:

force - 1 / True / true或0 / False / false,强制从群中删除节点。

默认false。

状态代码:

200 - 没有错误

404 - 没有这样的节点

406 - 节点不是群的一部分

500 - 服务器错误

更新节点

POST /nodes/(id)/update

更新节点。

POST请求的有效负载是新的,NodeSpec并

覆盖NodeSpec指定节点的当前值。

如果Availability或被Role省略,则返回

错误。省略的任何其他字段会将当前值重置为

空值或默认的群集范围值。

示例请求

POST /v1.24/nodes/24ifsmvkjbyhk/update?version=8 HTTP/1.1

Content-Type: application/json

Content-Length: 12345

{

"Availability": "active",

"Name": "node-name",

"Role": "manager",

"Labels": {

"foo": "bar"

}

}

响应示例:

HTTP/1.1 200 OK

Content-Length: 0

Content-Type: text/plain; charset=utf-8

查询参数:

version - 要更新的节点对象的版本号。这是

避免写入冲突所必需的。

JSON参数:

注释 - 与节点关联的可选medata。

名称 - 节点的用户定义名称。

标签 - 与节点关联的标签映射(例如

{"key":"value", "key2":"value2"})。

角色 - 节点的角色(worker | manager)。

可用性 - 节点的可用性(active | pause | drain)。

状态代码:

200 - 没有错误

404 - 没有这样的节点

406 - 节点不是群的一部分

500 - 服务器错误

3.8群

检查群

GET /swarm

检查群

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

{

"CreatedAt" : "2016-08-15T16:00:20.349727406Z",

"Spec" : {

"Dispatcher" : {

"HeartbeatPeriod" : 5000000000

},

"Orchestration" : {

"TaskHistoryRetentionLimit" : 10

},

"CAConfig" : {

"NodeCertExpiry" : 7776000000000000

},

"Raft" : {

"LogEntriesForSlowFollowers" : 500,

"HeartbeatTick" : 1,

"SnapshotInterval" : 10000,

"ElectionTick" : 3

},

"TaskDefaults" : {},

"Name" : "default"

},

"JoinTokens" : {

"Worker" : "SWMTKN-1-1h8aps2yszaiqmz2l3oc5392pgk8e49qhx2aj3nyv0ui0hez2a-6qmn92w6bu3jdvnglku58u11a",

"Manager" : "SWMTKN-1-1h8aps2yszaiqmz2l3oc5392pgk8e49qhx2aj3nyv0ui0hez2a-8llk83c4wm9lwioey2s316r9l"

},

"ID" : "70ilmkj2f6sp2137c753w2nmt",

"UpdatedAt" : "2016-08-15T16:32:09.623207604Z",

"Version" : {

"Index" : 51

}

}

状态代码:

200 - 没有错误

406 - 节点不是群的一部分

500 - 严重错误

初始化一个新的群

POST /swarm/init

初始化一个新的群。HTTP响应的主体包括节点ID。

示例请求:

POST /v1.24/swarm/init HTTP/1.1

Content-Type: application/json

Content-Length: 12345

{

"ListenAddr": "0.0.0.0:2377",

"AdvertiseAddr": "192.168.1.1:2377",

"ForceNewCluster": false,

"Spec": {

"Orchestration": {},

"Raft": {},

"Dispatcher": {},

"CAConfig": {}

}

}

响应示例:

HTTP/1.1 200 OK

Content-Length: 28

Content-Type: application/json

Date: Thu, 01 Sep 2016 21:49:13 GMT

Server: Docker/1.12.0 (linux)

"7v2t30z9blmxuhnyo6s4cpenp"

状态代码:

200 - 没有错误

400 - 参数不好

406 - 节点已经是群的一部分

500 - 服务器错误

JSON参数:

ListenAddr - 侦听用于管理器间通信的地址,以及确定

用于VXLAN隧道端点(VTEP)的网络接口。这可以是

表单中的地址/端口组合,也可以是192.168.1.1:4567后跟端口

号的接口,如eth0:4567。如果省略端口号,则使用默认的群集侦听端口

AdvertiseAddr - 向其他节点公布的外部可达地址。这可以是

表单中的地址/端口组合,也可以是192.168.1.1:4567后跟端口

号的接口,如eth0:4567。如果省略端口号,

则使用侦听地址中的端口号。如果AdvertiseAddr未指定,则会在

可能时自动检测。

ForceNewCluster - 强制创建一个新的群。

规范 - 新群的配置设置。

业务流程 - 群集的业务流程方面的配置设置。

TaskHistoryRetentionLimit - 存储的最大任务历史记录数。

筏 - 筏相关配置。

SnapshotInterval - 快照之间的日志条目数。

KeepOldSnapshots - 超出当前快照的快照数。

LogEntriesForSlowFollowers -

创建快照后要保持同步慢速跟随者的日志条目数。

HeartbeatTick - 每次心跳之间的滴答数(以秒为单位)。

ElectionTick - 没有领导者触发新

选举所需的滴答数(以秒为单位)。

Dispatcher - 任务调度程序的配置设置。

HeartbeatPeriod - 代理向调度程序发送心跳的延迟。

CAConfig - 证书颁发机构配置。

NodeCertExpiry - 节点证书的自动到期。

ExternalCA - 用于将签名请求转发到外部

证书颁发机构的配置。

协议 - 与外部CA通信的协议

(目前仅支持“cfssl”)。

URL - 应发送证书签名请求的URL。

选项 - 具有键/值对的对象,这些对象被解释

为外部CA驱动程序的特定于协议的选项。

加入现有的群体

POST /swarm/join

加入现有的群体

示例请求:

POST /v1.24/swarm/join HTTP/1.1

Content-Type: application/json

{

"ListenAddr": "0.0.0.0:2377",

"AdvertiseAddr": "192.168.1.1:2377",

"RemoteAddrs": ["node1:2377"],

"JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2"

}

响应示例:

HTTP/1.1 200 OK

Content-Length: 0

Content-Type: text/plain; charset=utf-8

状态代码:

200 - 没有错误

400 - 参数不好

406 - 节点已经是群的一部分

500 - 服务器错误

JSON参数:

ListenAddr - 如果节点被提升为

管理器,则监听用于管理器间通信的地址,以及确定用于VXLAN隧道端点(VTEP)的网络接口。

AdvertiseAddr - 向其他节点公布的外部可达地址。这可以是

表单中的地址/端口组合,也可以是192.168.1.1:4567后跟端口

号的接口,如eth0:4567。如果省略端口号,

则使用侦听地址中的端口号。如果AdvertiseAddr未指定,则会在

可能时自动检测。

RemoteAddr - 已参与swarm的任何管理器节点的地址。

JoinToken - 加入此群的秘密令牌。

留下一群

POST /swarm/leave

留下一群

示例请求:

POST /v1.24/swarm/leave HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Length: 0

Content-Type: text/plain; charset=utf-8

查询参数:

force - 布尔值(0/1,false / true)。强制离开群体,即使这是最后一个管理者或它将破坏群集。

状态代码:

200 - 没有错误

406 - 节点不是群的一部分

500 - 服务器错误

更新一个群

POST /swarm/update

更新一个群

示例请求:

POST /v1.24/swarm/update HTTP/1.1

Content-Length: 12345

{

"Name": "default",

"Orchestration": {

"TaskHistoryRetentionLimit": 10

},

"Raft": {

"SnapshotInterval": 10000,

"LogEntriesForSlowFollowers": 500,

"HeartbeatTick": 1,

"ElectionTick": 3

},

"Dispatcher": {

"HeartbeatPeriod": 5000000000

},

"CAConfig": {

"NodeCertExpiry": 7776000000000000

},

"JoinTokens": {

"Worker": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx",

"Manager": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2"

}

}

响应示例:

HTTP/1.1 200 OK

Content-Length: 0

Content-Type: text/plain; charset=utf-8

查询参数:

version - 要更新的swarm对象的版本号。这是

避免写入冲突所必需的。

rotateWorkerToken - 设置为true(或1)以旋转工作者加入标记。

rotateManagerToken - 设置为true(或1)以旋转管理器连接标记。

状态代码:

200 - 没有错误

400 - 参数不好

406 - 节点不是群的一部分

500 - 服务器错误

JSON参数:

业务流程 - 群集的业务流程方面的配置设置。

TaskHistoryRetentionLimit - 存储的最大任务历史记录数。

筏 - 筏相关配置。

SnapshotInterval - 快照之间的日志条目数。

KeepOldSnapshots - 超出当前快照的快照数。

LogEntriesForSlowFollowers -

创建快照后要保持同步慢速跟随者的日志条目数。

HeartbeatTick - 每次心跳之间的滴答数(以秒为单位)。

ElectionTick - 没有领导者触发新

选举所需的滴答数(以秒为单位)。

Dispatcher - 任务调度程序的配置设置。

HeartbeatPeriod - 代理向调度程序发送心跳的延迟。

CAConfig - CA配置。

NodeCertExpiry - 节点证书的自动到期。

ExternalCA - 用于将签名请求转发到外部

证书颁发机构的配置。

协议 - 与外部CA通信的协议

(目前仅支持“cfssl”)。

URL - 应发送证书签名请求的URL。

选项 - 具有键/值对的对象,这些对象被解释

为外部CA驱动程序的特定于协议的选项。

JoinTokens - 其他节点可以使用的标记来加入swarm。

Worker - 用于作为工人加入的令牌。

经理 - 用作加入经理的令牌。

3.9服务

注意:服务操作需要首先成为群组的一部分。

列出服务

GET /services

列出服务

示例请求:

GET /v1.24/services HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Type: application/json

[

{

"ID": "9mnpnzenvg8p8tdbtq4wvbkcz",

"Version": {

"Index": 19

},

"CreatedAt": "2016-06-07T21:05:51.880065305Z",

"UpdatedAt": "2016-06-07T21:07:29.962229872Z",

"Spec": {

"Name": "hopeful_cori",

"TaskTemplate": {

"ContainerSpec": {

"Image": "redis"

},

"Resources": {

"Limits": {},

"Reservations": {}

},

"RestartPolicy": {

"Condition": "any",

"MaxAttempts": 0

},

"Placement": {

"Constraints": [

"node.role == worker"

]

}

},

"Mode": {

"Replicated": {

"Replicas": 1

}

},

"UpdateConfig": {

"Parallelism": 1,

"FailureAction": "pause"

},

"EndpointSpec": {

"Mode": "vip",

"Ports": [

{

"Protocol": "tcp",

"TargetPort": 6379,

"PublishedPort": 30001

}

]

}

},

"Endpoint": {

"Spec": {

"Mode": "vip",

"Ports": [

{

"Protocol": "tcp",

"TargetPort": 6379,

"PublishedPort": 30001

}

]

},

"Ports": [

{

"Protocol": "tcp",

"TargetPort": 6379,

"PublishedPort": 30001

}

],

"VirtualIPs": [

{

"NetworkID": "4qvuz4ko70xaltuqbt8956gd1",

"Addr": "10.255.0.2/16"

},

{

"NetworkID": "4qvuz4ko70xaltuqbt8956gd1",

"Addr": "10.255.0.3/16"

}

]

}

}

]

查询参数:

filters - map[string][]string要在

服务列表上处理的过滤器(a )的JSON编码值。可用过滤器:

id=

label=

name=

状态代码:

200 - 没有错误

406 - 节点不是群的一部分

500 - 服务器错误

创建服务

POST /services/create

创建服务。使用此端点

从注册表使用私有存储库创建服务时,X-Registry-Auth必须使用标头

包含base64编码的AuthConfig对象。有关更多详细信息,请参阅创建

图像部分。

示例请求:

POST /v1.24/services/create HTTP/1.1

Content-Type: application/json

Content-Length: 12345

{

"Name": "web",

"TaskTemplate": {

"ContainerSpec": {

"Image": "nginx:alpine",

"Mounts": [

{

"ReadOnly": true,

"Source": "web-data",

"Target": "/usr/share/nginx/html",

"Type": "volume",

"VolumeOptions": {

"DriverConfig": {

},

"Labels": {

"com.example.something": "something-value"

}

}

}

],

"User": "33"

},

"Networks": [

{

"Target": "overlay1"

}

],

"LogDriver": {

"Name": "json-file",

"Options": {

"max-file": "3",

"max-size": "10M"

}

},

"Placement": {

"Constraints": [

"node.role == worker"

]

},

"Resources": {

"Limits": {

"MemoryBytes": 104857600

},

"Reservations": {

}

},

"RestartPolicy": {

"Condition": "on-failure",

"Delay": 10000000000,

"MaxAttempts": 10

}

},

"Mode": {

"Replicated": {

"Replicas": 4

}

},

"UpdateConfig": {

"Delay": 30000000000,

"Parallelism": 2,

"FailureAction": "pause"

},

"EndpointSpec": {

"Ports": [

{

"Protocol": "tcp",

"PublishedPort": 8080,

"TargetPort": 80

}

]

},

"Labels": {

"foo": "bar"

}

}

响应示例:

HTTP/1.1 201 Created

Content-Type: application/json

{

"ID":"ak7w3gjqoa3kuz8xcpnyy0pvl"

}

状态代码:

201 - 没有错误

403 - 网络不符合服务条件

406 - 节点不是群的一部分

409 - 名称与现有对象冲突

500 - 服务器错误

JSON参数:

名称 - 服务的用户定义名称。

标签 - 与服务关联的标签映射(例如{"key":"value", "key2":"value2"})。

TaskTemplate - 作为新服务的一部分启动的任务的规范。

ContainerSpec - 容器的容器设置作为此任务的一部分启动。

Image - 一个字符串,指定用于容器的图像名称。

命令 - 要在映像中运行的命令。

Args - 命令的参数。

Env - 以["VAR=value"[,"VAR2=value2"]]。形式的环境变量列表。

Dir - 一个字符串,指定要运行的命令的工作目录。

User - 指定容器内用户的字符串值。

标签 - 与服务关联的标签映射(例如

{"key":"value", "key2":"value2"})。

装载 - 要添加到

作为服务一部分创建的容器的装载的规范。

目标 - 容器路径。

源 - 安装源(例如卷名,主机路径)。

类型 - 安装类型(bind,或volume)。

ReadOnly - 一个布尔值,指示挂载是否应该是只读的。

BindOptions - bind类型的可选配置。

传播 -甲传播模式与值[r]private,[r]shared或[r]slave。

VolumeOptions - volume类型的可选配置。

NoCopy - 一个布尔值,指示是否应使用

来自目标的数据填充卷。(默认为false)

标签 - 用户定义的卷名称和标签。

DriverConfig - 特定于驱动程序的选项的映射。

名称 - 用于创建卷的驱动程序的名称。

选项 - 驱动程序特定选项的键/值映射。

StopGracePeriod - 在

强制终止容器之前等待容器终止的时间。

LogDriver - 作为

服务的一部分创建的容器的日志配置。

名称 -记录驾驶员的姓名使用(json-file,syslog,

journald,gelf,fluentd,awslogs,splunk,etwlogs,none)。

选项 - 特定于驱动程序的选项。

资源 - 适用于作为

服务一部分创建的每个单独容器的资源要求。

限制 - 定义资源限制。

NanoCPUs - CPU限制,以10 -9 CPU份额为单位。

MemoryBytes - 以字节为单位的内存限制。

预订 - 定义资源预留。

NanoCPUs - CPU预留,以10 -9 CPU份额为单位。

MemoryBytes - 以字节为单位的内存预留。

RestartPolicy - 适用于

作为此服务的一部分创建的容器的重新启动策略的规范。

条件 -条件重启(none,on-failure,或any)。

延迟 - 重启尝试之间的延迟。

MaxAttempts - 放弃前重新启动给定容器的最大尝试次数(默认值为

0,将被忽略)。

窗口 - Windows是用于评估重新启动策略的时间窗口(默认值为

0,这是无限制的)。

展示位置 - 服务运行位置的限制。

约束 - 一系列约束,例如[ "node.role == manager" ]。

模式 - 服务的调度模式(replicated或global默认为replicated)。

UpdateConfig - 服务更新策略的规范。

并行性 - 一次迭代中要更新的最大任务数(0表示无限

并行)。

延迟 - 更新之间的时间量。

FailureAction - 如果更新的任务无法运行或在

更新期间停止运行,则采取的操作。值是continue和pause。

网络 - 将服务附加到的网络名称或ID的数组。

EndpointSpec - 可配置为访问和负载平衡服务的属性。

模式 - 用于

任务(vip或dnsrr)之间内部负载平衡的分辨率模式。vip如果未提供,则默认为。

端口 - 可从

外部访问此服务的公开端口列表,格式为:

{"Protocol": <"tcp"|"udp">, "PublishedPort": , "TargetPort": }。

只有在使用vip分辨率模式时才能提供端口。

请求标题:

内容类型 - 设置为"application/json"。

X-Registry-Auth -base64编码的AuthConfig对象,包含

登录信息或令牌。 有关更多详细信息,请参阅创建图像

部分。

删除服务

DELETE /services/(id or name)

停止并删除该服务 id

示例请求:

DELETE /v1.24/services/16253994b7c4 HTTP/1.1

响应示例:

HTTP/1.1 200 OK

Content-Length: 0

Content-Type: text/plain; charset=utf-8

状态代码:

200 - 没有错误

404 - 没有这样的服务

406 - 节点不是群的一部分

500 - 服务器错误

检查一项或多项服务

GET /services/(id or name)

返回有关服务的信息id。

示例请求:

GET /v1.24/services/1cb4dnqcyx6m66g2t538x3rxha HTTP/1.1

响应示例:

{

"ID": "ak7w3gjqoa3kuz8xcpnyy0pvl",

"Version": {

"Index": 95

},

"CreatedAt": "2016-06-07T21:10:20.269723157Z",

"UpdatedAt": "2016-06-07T21:10:20.276301259Z",

"Spec": {

"Name": "redis",

"TaskTemplate": {

"ContainerSpec": {

"Image": "redis"

},

"Resources": {

"Limits": {},

"Reservations": {}

},

"RestartPolicy": {

"Condition": "any",

"MaxAttempts": 0

},

"Placement": {}

},

"Mode": {

"Replicated": {

"Replicas": 1

}

},

"UpdateConfig": {

"Parallelism": 1,

"FailureAction": "pause"

},

"EndpointSpec": {

"Mode": "vip",

"Ports": [

{

"Protocol": "tcp",

"TargetPort": 6379,

"PublishedPort": 30001

}

]

}

},

"Endpoint": {

"Spec": {

"Mode": "vip",

"Ports": [

{

"Protocol": "tcp",

"TargetPort": 6379,

"PublishedPort": 30001

}

]

},

"Ports": [

{

"Protocol": "tcp",

"TargetPort": 6379,

"PublishedPort": 30001

}

],

"VirtualIPs": [

{

"NetworkID": "4qvuz4ko70xaltuqbt8956gd1",

"Addr": "10.255.0.4/16"

}

]

}

}

状态代码:

200 - 没有错误

404 - 没有这样的服务

406 - 节点不是群的一部分

500 - 服务器错误

更新服务

POST /services/(id)/update

更新服务。使用此端点使用

注册表中的专用存储库创建服务时,X-Registry-Auth标头可用于

更新为服务存储的身份验证信息。

标头包含base64编码的AuthConfig对象。有关更多详细信息,请参阅创建

图像部分。

示例请求:

POST /v1.24/services/1cb4dnqcyx6m66g2t538x3rxha/update?version=23 HTTP/1.1

Content-Type: application/json

Content-Length: 12345

{

"Name": "top",

"TaskTemplate": {

"ContainerSpec": {

"Image": "busybox",

"Args": [

"top"

]

},

"Resources": {

"Limits": {},

"Reservations": {}

},

"RestartPolicy": {

"Condition": "any",

"MaxAttempts": 0

},

"Placement": {}

},

"Mode": {

"Replicated": {

"Replicas": 1

}

},

"UpdateConfig": {

"Parallelism": 1

},

"EndpointSpec": {

"Mode": "vip"

}

}

响应示例:

HTTP/1.1 200 OK

Content-Length: 0

Content-Type: text/plain; charset=utf-8

JSON参数:

名称 - 服务的用户定义名称。请注意,不支持重命名服务。

标签 - 与服务关联的标签映射(例如{"key":"value", "key2":"value2"})。

TaskTemplate - 作为新服务的一部分启动的任务的规范。

ContainerSpec - 容器的容器设置作为此任务的一部分启动。

Image - 一个字符串,指定用于容器的图像名称。

命令 - 要在映像中运行的命令。

Args - 命令的参数。

Env - 以["VAR=value"[,"VAR2=value2"]]。形式的环境变量列表。

Dir - 一个字符串,指定要运行的命令的工作目录。

User - 指定容器内用户的字符串值。

标签 - 与服务关联的标签映射(例如

{"key":"value", "key2":"value2"})。

装载 - 要添加到作为新

服务一部分创建的容器的装载的规范。

目标 - 容器路径。

源 - 安装源(例如卷名,主机路径)。

类型 - 安装类型(bind,或volume)。

ReadOnly - 一个布尔值,指示挂载是否应该是只读的。

BindOptions - bind类型的 可选配置

传播 -甲传播模式与值[r]private,[r]shared或[r]slave。

VolumeOptions - volume类型的可选配置。

NoCopy - 一个布尔值,指示是否应使用

来自目标的数据填充卷。(默认为false)

标签 - 用户定义的卷名称和标签。

DriverConfig - 特定于驱动程序的选项的映射。

名称 - 用于创建卷的驱动程序的名称

选项 - 驱动程序特定选项的键/值映射

StopGracePeriod - 在

强制终止容器之前等待容器终止的时间。

资源 - 适用于作为

服务一部分创建的每个单独容器的资源要求。

限制 - 定义资源限制。

CPU - CPU限制

内存 - 内存限制

预订 - 定义资源预留。

CPU - CPU预留

记忆 - 记忆预约

RestartPolicy - 适用于

作为此服务的一部分创建的容器的重新启动策略的规范。

条件 -条件重启(none,on-failure,或any)。

延迟 - 重启尝试之间的延迟。

MaxAttempts - 放弃前重新启动给定容器的最大尝试次数(默认值为

0,将被忽略)。

窗口 - Windows是用于评估重新启动策略的时间窗口(默认值为

0,这是无限制的)。

展示位置 - 服务运行位置的限制。

约束 - 一系列约束,例如[ "node.role == manager" ]。

模式 - 服务的调度模式(replicated或global默认为replicated)。

UpdateConfig - 服务更新策略的规范。

并行性 - 一次迭代中要更新的最大任务数(0表示无限

并行)。

延迟 - 更新之间的时间量。

网络 - 将服务附加到的网络名称或ID的数组。

EndpointSpec - 可配置为访问和负载平衡服务的属性。

模式 - 用于

任务(vip或dnsrr)之间内部负载平衡的分辨率模式。vip如果未提供,则默认为。

端口 - 可从

外部访问此服务的公开端口列表,格式为:

{"Protocol": <"tcp"|"udp">, "PublishedPort": , "TargetPort": }。

只有在使用vip分辨率模式时才能提供端口。

查询参数:

version - 要更新的服务对象的版本号。这是

避免写入冲突所必需的。

请求标题:

内容类型 - 设置为"application/json"。

X-Registry-Auth -base64编码的AuthConfig对象,包含

登录信息或令牌。 有关更多详细信息,请参阅创建图像

部分。

状态代码:

200 - 没有错误

404 - 没有这样的服务

406 - 节点不是群的一部分

500 - 服务器错误

3.10任务

注意:任务操作要求引擎成为群组的一部分。

列出任务

GET /tasks

列出任务

示例请求:

GET /v1.24/tasks HTTP/1.1

响应示例:

[

{

"ID": "0kzzo1i0y4jz6027t0k7aezc7",

"Version": {

"Index": 71

},

"CreatedAt": "2016-06-07T21:07:31.171892745Z",

"UpdatedAt": "2016-06-07T21:07:31.376370513Z",

"Spec": {

"ContainerSpec": {

"Image": "redis"

},

"Resources": {

"Limits": {},

"Reservations": {}

},

"RestartPolicy": {

"Condition": "any",

"MaxAttempts": 0

},

"Placement": {}

},

"ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz",

"Slot": 1,

"NodeID": "60gvrl6tm78dmak4yl7srz94v",

"Status": {

"Timestamp": "2016-06-07T21:07:31.290032978Z",

"State": "running",

"Message": "started",

"ContainerStatus": {

"ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035",

"PID": 677

}

},

"DesiredState": "running",

"NetworksAttachments": [

{

"Network": {

"ID": "4qvuz4ko70xaltuqbt8956gd1",

"Version": {

"Index": 18

},

"CreatedAt": "2016-06-07T20:31:11.912919752Z",

"UpdatedAt": "2016-06-07T21:07:29.955277358Z",

"Spec": {

"Name": "ingress",

"Labels": {

"com.docker.swarm.internal": "true"

},

"DriverConfiguration": {},

"IPAMOptions": {

"Driver": {},

"Configs": [

{

"Subnet": "10.255.0.0/16",

"Gateway": "10.255.0.1"

}

]

}

},

"DriverState": {

"Name": "overlay",

"Options": {

"com.docker.network.driver.overlay.vxlanid_list": "256"

}

},

"IPAMOptions": {

"Driver": {

"Name": "default"

},

"Configs": [

{

"Subnet": "10.255.0.0/16",

"Gateway": "10.255.0.1"

}

]

}

},

"Addresses": [

"10.255.0.10/16"

]

}

],

},

{

"ID": "1yljwbmlr8er2waf8orvqpwms",

"Version": {

"Index": 30

},

"CreatedAt": "2016-06-07T21:07:30.019104782Z",

"UpdatedAt": "2016-06-07T21:07:30.231958098Z",

"Name": "hopeful_cori",

"Spec": {

"ContainerSpec": {

"Image": "redis"

},

"Resources": {

"Limits": {},

"Reservations": {}

},

"RestartPolicy": {

"Condition": "any",

"MaxAttempts": 0

},

"Placement": {}

},

"ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz",

"Slot": 1,

"NodeID": "60gvrl6tm78dmak4yl7srz94v",

"Status": {

"Timestamp": "2016-06-07T21:07:30.202183143Z",

"State": "shutdown",

"Message": "shutdown",

"ContainerStatus": {

"ContainerID": "1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213"

}

},

"DesiredState": "shutdown",

"NetworksAttachments": [

{

"Network": {

"ID": "4qvuz4ko70xaltuqbt8956gd1",

"Version": {

"Index": 18

},

"CreatedAt": "2016-06-07T20:31:11.912919752Z",

"UpdatedAt": "2016-06-07T21:07:29.955277358Z",

"Spec": {

"Name": "ingress",

"Labels": {

"com.docker.swarm.internal": "true"

},

"DriverConfiguration": {},

"IPAMOptions": {

"Driver": {},

"Configs": [

{

"Subnet": "10.255.0.0/16",

"Gateway": "10.255.0.1"

}

]

}

},

"DriverState": {

"Name": "overlay",

"Options": {

"com.docker.network.driver.overlay.vxlanid_list": "256"

}

},

"IPAMOptions": {

"Driver": {

"Name": "default"

},

"Configs": [

{

"Subnet": "10.255.0.0/16",

"Gateway": "10.255.0.1"

}

]

}

},

"Addresses": [

"10.255.0.5/16"

]

}

]

}

]

查询参数:

filters - map[string][]string要在

服务列表上处理的过滤器(a )的JSON编码值。可用过滤器:

id=

name=

service=

node=

label=key 要么 label="key=value"

desired-state=(running | shutdown | accepted)

状态代码:

200 - 没有错误

406 - 节点不是群的一部分

500 - 服务器错误

检查任务

GET /tasks/(id)

获取有关任务的详细信息 id

示例请求:

GET /v1.24/tasks/0kzzo1i0y4jz6027t0k7aezc7 HTTP/1.1

响应示例:

{

"ID": "0kzzo1i0y4jz6027t0k7aezc7",

"Version": {

"Index": 71

},

"CreatedAt": "2016-06-07T21:07:31.171892745Z",

"UpdatedAt": "2016-06-07T21:07:31.376370513Z",

"Spec": {

"ContainerSpec": {

"Image": "redis"

},

"Resources": {

"Limits": {},

"Reservations": {}

},

"RestartPolicy": {

"Condition": "any",

"MaxAttempts": 0

},

"Placement": {}

},

"ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz",

"Slot": 1,

"NodeID": "60gvrl6tm78dmak4yl7srz94v",

"Status": {

"Timestamp": "2016-06-07T21:07:31.290032978Z",

"State": "running",

"Message": "started",

"ContainerStatus": {

"ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035",

"PID": 677

}

},

"DesiredState": "running",

"NetworksAttachments": [

{

"Network": {

"ID": "4qvuz4ko70xaltuqbt8956gd1",

"Version": {

"Index": 18

},

"CreatedAt": "2016-06-07T20:31:11.912919752Z",

"UpdatedAt": "2016-06-07T21:07:29.955277358Z",

"Spec": {

"Name": "ingress",

"Labels": {

"com.docker.swarm.internal": "true"

},

"DriverConfiguration": {},

"IPAMOptions": {

"Driver": {},

"Configs": [

{

"Subnet": "10.255.0.0/16",

"Gateway": "10.255.0.1"

}

]

}

},

"DriverState": {

"Name": "overlay",

"Options": {

"com.docker.network.driver.overlay.vxlanid_list": "256"

}

},

"IPAMOptions": {

"Driver": {

"Name": "default"

},

"Configs": [

{

"Subnet": "10.255.0.0/16",

"Gateway": "10.255.0.1"

}

]

}

},

"Addresses": [

"10.255.0.10/16"

]

}

]

}

状态代码:

200 - 没有错误

404 - 未知任务

406 - 节点不是群的一部分

500 - 服务器错误

4.走得更远

4.1内部 docker run

例如,docker run命令行进行以下API调用:

创建容器

如果状态代码为404,则表示图像不存在:

试着拉它。

然后,重试创建容器。

启动容器。

如果您未处于分离模式:

装到容器中,使用logs=1(拥有stdout和

stderr从容器的开始)和stream=1

如果处于分离模式或仅stdin附加,则显示容器的ID。

4.2劫持

在这个版本的API, /attach,利用劫持到运输stdin,

stdout以及stderr在同一个插座。

为了暗示关于连接劫持的潜在代理,Docker客户端发送

类似于websocket的连接升级头。

Upgrade: tcp

Connection: Upgrade

当Docker守护程序检测到Upgrade标头时,它会将其状态代码

从200 OK切换到101 UPGRADED并重新发送相同的标头。

4.3 CORS请求

要将交叉原始请求设置为Engine API,请

--api-cors-header在守护程序模式下运行Docker时给出值。设置*(星号)允许全部,

默认或空白表示CORS禁用

$ dockerd -H="192.168.1.9:2375" --api-cors-header=" http://foo.bar "

Subscribe to 银河系技术博客

将最新帖子发送到您的收件箱

youremail@example.com

订阅

yhblog

阅读此作者的更多帖子。

阅读更多

缓存

Jedis异常汇总(持续更新)

一.无法从连接池获取到Jedis连接1.异常堆栈(1) 连接池参数blockWhenExhausted = true(默认)如果连接池没有可用Jedis连接,会等待maxWaitMillis(毫秒),依然没有获取到可用Jedis连接,会抛出如下异常:redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool    …Caused by: java.util.NoSuchElementException: Timeout waiting for

yhblog

7分钟阅读

银河系技术博客 icon

银河系技术博客

Docker Engine API

分享这个

银河系技术博客 © 2019

最新帖子

??邮箱:public@space-explore.com

?? 微信:yinhexi-one

Subscribe to 银河系技术博客

保持最新!将所有最新且最好的帖子直接发送到您的收件箱

public@space-explore.com

订阅


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Don't Make Me Think

Don't Make Me Think

Steve Krug / New Riders Press / 18 August, 2005 / $35.00

Five years and more than 100,000 copies after it was first published, it's hard to imagine anyone working in Web design who hasn't read Steve Krug's "instant classic" on Web usability, but people are ......一起来看看 《Don't Make Me Think》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具