内容简介: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×tamps=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协议的最简单方法如下:
- Read eight bytes.
-
Choose
stdout
orstderr
depending on the first byte. - Extract the frame size from the last four bytes.
- Read the extracted size and output it on the correct output.
- 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
订阅
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 觅道文档 v0.6.0 发布,在线文档系统
- 一个适合程序员的 Markdown 文档编辑和文档管理方案
- 【微服务】如何优雅的写文档(文档自动化swagger)
- 利用Python3内置文档资源高效学习及官方中文文档
- 什么是 API 文档工具?附带 6 款好用的 API 文档工具介绍
- VirAPI 接口文档导出功能上线,可分享并离线查看接口文档啦!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。