docker-ce engine API 文档翻译-容器篇
版本:V1.24
翻译者:王照民
原文地址:https://github.com/docker/docker-ce/blob/master/components/engine/docs/api/v1.24.md
容器
容器列表
GET /containers/json
请求样例:
GET /v1.24/containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1
返回容器列表 请注意他和检查一个容器信息接口的不同,这里返回的是容器信息列表
参数
参数名 | 说明 |
---|---|
all | 默认false 只返回所有正在运行的容器 |
limit | 返回最近被创建的重启数,包含未在运行状态的容器 |
size | 默认false 返回容器的大小 描述字段为 SizeRw SizeRootFs |
file | 过滤器 用于过滤返回的容器信息 以json格式编码例如{"status": ["paused"]} <br /> exited=<int> ; -- containers with exit code of <int> ;<br /> status= (created |
返回值
[ { "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": { "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": { "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": { "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": { "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": [] } ]
返回状态值:
200 - 正常
400 - 参数错误
500 - 服务器异常
创建容器
POST /containers/create
请求样例
GET /v1.24/containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1
请求参数
{ "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"] } } } }
返回值
{ "Id":"e90e34656806", "Warnings":[] }
请求参数说明
Hostname 容器的主机名 ,必须符合RFC 1123 规范 ( string类型)
Domainname 容器的域名(string类型)
User 容器的内部用户 (string类型)
AttachStdin 是否附加标准输入 (Boolean 类型)
AttachStdout 是否附加标准输出(Boolean 类型)
AttachStderr 是否附加标准错误(Boolean 类型)
Tty 是否附加标准流到 tty 如果stdin 是关闭的也将包含在内(Boolean 类型)
OpenStdin 是否打开标准输入 (Boolean 类型)
Env 环境变量列表 例如:[ "FOO=bar", "BAZ=quux"]
Labels 给容器添加标签列表 例如 { "com.example.vendor": "Acme", "com.example.license": "GPL", "com.example.version": "1.0"}
Cmd 运行指定的命令 (string类型) 例如[ "date"]
Entrypoint 设置容器的进入点
Image 设置容器所使用的镜像
Volumes 设置容器要挂载的硬盘目录 例如{ "/volumes/data": {}}
Healthcheck 用于检查容器是否健康 例如{ "Test": [ "CMD-SHELL", "curl localhost:3000" ], "Interval": 1000000000, "Timeout": 10000000000, "Retries": 10, "StartPeriod": 60000000000}
**Test** -测试可以是一下方式 : + `{}` 从镜像或者父镜像集成健康检查 + `{"NONE"}` 没有健康检查 + `{"CMD", args...}` 直接执行命名 + `{"CMD-SHELL", command}` 用shell执行命令 **Interval** - 等待健康检查的时间单位纳秒. 他可以是0或者至少1000000 (1ms ) 如果是0则继承 **Timeout** - 检查超时时间. 他可以是0或者至少1000000 (1ms ) 如果是0则继承 **Retries** - 当容器不健康时 ,重试健康检查的次数。如果是0则继承 **StartPeriod** - 容器初始化之后多久后开始健康检查. 他可以是0或者至少1000000 (1ms ) 如果是0则继承
WorkingDir 工作目录,命令将在这个目录下运行 (string类型)
NetworkDisabled 如果设置为true 将禁用容器网络(Boolean 类型)
ExposedPorts 容器内部向外暴露的端口 例如{ "22/tcp": {}}
StopSignal 容器停止信号 填写字符串或者无符号证书 默认为
SIGTERM
HostConfig 主机配置
附加docker的三种数据挂载方式:参考:https://docs.docker.com/engine/admin/volumes/#tips-for-using-bind-mounts-or-volumes 1、Volumes方式下:容器内的数据被存放到宿主机(linux)一个特定的目录下(/var/lib/docker/volumes/)。这个目录只有Docker可以管理,其他进程不能修改。如果想持久保存容器的应用数据,Volumes是Docker推荐的挂载方式。 2、Bind mounts方式下:容器内的数据被存放到宿主机文件系统的任意位置,甚至存放到一些重要的系统目录或文件中。除了Docker之外的进程也可以任意对他们进行修改; 3、tmpfs方式下:容器的数据只会存放到宿主机的内存中,不会被写到宿主机的文件系统中,因此不能持久保存容器的应用数据。
Binds 这个容器的volume 列表 列举volume字符串
host-src:container-dest 挂载一个宿主机目录到容器内 ,host-src和container-dest都必须是绝对路径 host-src:container-dest:ro 只读 挂载宿主机目录到容器内,host-src和container-dest都必须是绝对路径 volume-name:container-dest 挂载 一个volume驱动带容器内,container-dest都必须是绝对路径 volume-name:container-dest:ro 只读挂载一个volume驱动带容器内 ,container-dest都必须是绝对路径
Tmpfs 临时文件系统 这里填写一个容器内的目录map ,他们将被tmpfs 和它一直的mount选项替换,
{ "/run": "rw,noexec,nosuid,size=65536k" }
Links 容器连接列表 每一个连接都要符合
container_name:alias
格式Memory 内存限制 单位bytes
MemorySwap 全部内存限制(Memory +Swap)设置为-1 不限制swap 你必须使用memory 并且使swap的值比memory大一些
MemoryReservation 软件内存限制
KernelMemory 核心内存限制
CpuPercent 在所有有效cpu核心中允许被使用的个数 (windows 只有daemon )
CpuShares 容器cpu的共享个数 (这是一个相对其他容器的值)
CpuPeriod cpu周期时间
CpuQuota 一个cpu周期中容器能得到的cpu时间
CpusetCpus 设置
cgroups CpusetCpus
的使用值CpusetMems 允许使用的内存节点 (0-3, 0,1). 只能是在NUMA 系统中有效的
IOMaximumBandwidth 在IO地位中最大的IO绝对比例
IOMaximumIOps 每一秒的io中最大的IO绝对比例
BlkioWeight 块IO带宽(相对带宽) 只允许在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 调整容器的memory swappiness 行为 只接受0到100之间的值
OomKillDisable boolean值 是否允许OOM杀死容器
OomScoreAdj 设置OOM杀死容器 排序分数
PidMode 设置容器的PID命名空间 模式
"container:<name|id>"
加入另外一个容器的PID命名空间。"host"
使用宿主机的PID命名空间PidsLimit 调整容器的PID限制 设置为-1 则不限制
PortBindings 设置宿主机和容器的端口绑定 map
{ <port>/<protocol>: [{ "HostPort": "<port>" }] }
PublishAllPorts boolean 值 是否分配一个暂时的主机端口给容器暴露的端口。当容器停止端口被收回,当容器开启,端口被分配,当容器重启,分配的端口将改变。端口从依赖在内核上的临时端口选择。例如linux的范围在
/proc/sys/net/ipv4/ip_local_port_range
中划定Privileged boolean值 是否给容器主机的完全访问权限
ReadonlyRootfs boolean值 是否只读 挂载容器的root文件系统
Dns 容器使用的dns服务列表
DnsOptions dns配置项列表
DnsSearch dns搜索域列表
ExtraHosts hostnames/IP映射列表 将被添加到容器的
/etc/hosts
描述["hostname:IP"]
VolumesFrom 从其他容器 继承volumes 列表 描述
<container name>[:<ro|rw>]
CapAdd 核心功能添加到容器的列表
Capdrop 从容器中退出的核心功能列表
GroupAdd 附加用户组到容器,容器进程将被运行
RestartPolicy 重启策略 当容器退出时将被执行的行为 ,
Name
为always 时 一直重启 ,"unless-stopped"` 除非用户停止,否则一直重启 on-failure 只有容器退出码为非0时重启。如果on-failure被使用MaximumRetryCount 将控制最大重启次数,默认不重启 ,重启延期被加入,防止容器重启泛滥,(延期是以前的两倍,开始是100ms)UsernsMode 当用户命名空间重新映射选项打开时,设置用户命名空间的模式 支持 host
NetworkMode 设置容器的网络模式 支持的标准值是:
bridge
,host
,none
, 和container:<name|id>
.设置另外的值 则为容器连接的网络名称Devices 加入到容器中的驱动列表 例如
{ "PathOnHost": "/dev/deviceName", "PathInContainer": "/dev/deviceName", "CgroupPermissions": "mrw"}
Ulimits 设置容器不做限制的列表 例如
{ "Name": <name>, "Soft": <soft limit>, "Hard": <hard limit> }
,Ulimits: { "Name": "nofile", "Soft": 1024, "Hard": 2048 }
Sysctls 设置容器的核心参数 例如 { <name>: <Value> }
{ "net.ipv4.ip_forward": "1" }
SecurityOpt 为MLS定制的lables列表
StorageOpt 容器的存储配置 例如
{"size":"120G"}
LogConfig 容器的日志配置 例如
{ "Type": "<driver_name>", "Config": {"key1": "val1"}}
.允许的日志等级json-file
,syslog
,journald
,gelf
,fluentd
,awslogs
,splunk
,etwlogs
,none
.json-file
CgroupParent 创建容器的
cgroups
路径 如果这个路径不是绝对路径 ,这个路径被认为是初始化进程的cgroups
路径,如这个路径不存在,则会被创建VolumeDriver 容器挂载的volumes驱动列表
ShmSize
/dev/shm
的大小 这个值必须大于0 如果省略系统默认64MB
查询参数
name 分配给容器的名字 必须满足/?[a-zA-Z0-9_-]+
.
状态值
201 没有错误
400 参数错误
404 没有找到容器
406 不能进入容器(容器不在运行)
409 冲突
500 服务错误
检查容器
请求样例
GET /containers/(id or name)/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
返回值样例
{ .... "SizeRw": 0, "SizeRootFs": 972, .... }
查询参数
size 1/True/true 或者 0/False/false 容器的大小信息 .默认
false
状态值
200 没有错误
404 未找到容器
500 服务错误
容器内进程列表
请求
GET /containers/(id or name)/top
容器内正在运行的进程列表,想Unix系统本地执行ps 命令 这个命令不支持windows
请求样例
GET /v1.24/containers/4fa6e0f0c678/top HTTP/1.1
返回值样例
{ "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
样例返回值
{ "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参数 默认 -ef
状态码
200 没有错误
404 没有找到容器
500 服务错误
得到容器日志
请求
GET /containers/(id or name)/logs
得到容器的标准输出和标准错误日志
`Note:这个命令可以使用只有在容器日志驱动为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,显示标准输出日子 默认false
stderr - 1/True/true 或 0/False/false,显示标准错误日子 默认false
since – UNIX 时间戳 显示从这个时间戳之后的日志 默认为0 不进行过滤
timestamps – 1/True/true or 0/False/false, 在每行日志上打印时间戳 默认false
tail 输错末尾指定行数的日志
all
或者<number>
默认为all
状态值、
101 没有错误 关于劫持的提示代理
200 没有错误 没有找到升级信息
404 没有找到容器
500 服务器错误
查询容器文件系统改变
请求
GET /containers/(id or name)/changes
查询容器文件系统改变
样例请求
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)/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_stats
属性
查询参数
stream – 1/True/true or 0/False/false, 推送状态然后断开 默认为true
返回值
200 – 没错误
404 – 没找到容器
500 – 服务器错误
调整容器TTY
请求
POST /containers/(id or name)/resize
调整容器TTY,义字符的个数为单位 你必须重启容器生效调整
请求样例
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
开启容器
请求样例
POST /v1.24/containers/e90e34656806/start HTTP/1.1
返回值样例
HTTP/1.1 204 No Content
参数
detachKeys – 覆盖key序列 区分容器 , key值是
[a-Z]
orctrl-<value>
。<value>
是a-z
,@
,^
,[
,,
or_
.之一
返回状态:
204 –正常
304 – 容器已经启动
404 – 没有容器
500 – 服务器错误
停止容器
请求
POST /containers/(id or name)/stop
停止容器
请求样例
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
重启容器
请求样例
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
请求样例
POST /v1.24/containers/e90e34656806/kill HTTP/1.1
返回样例
HTTP/1.1 204 No Content
参数:
signal - 单独发送到容器 :整数或
SIGINT
.不设置时SIGKILL
假定等待容器退出 When not set,SIGKILL
is assumed and the call waits for the container to exit.
返回码:
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
重命名一个容器
请求样例
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
暂停容器
请求样例
POST /v1.24/containers/e90e34656806/pause HTTP/1.1
返回样例
HTTP/1.1 204 No Content
返回值:
204 –正常
404 – 没有容器
500 – 服务错误
解除暂停容器
请求
POST /containers/(id or name)/unpause
解除暂停容器
请求样例
POST /v1.24/containers/e90e34656806/unpause HTTP/1.1
返回样例
HTTP/1.1 204 No Content
返回值:
204 – 正常
404 – 没有容器
500 – 服务错误
监视容器
请求
POST /containers/(id or name)/attach
监视容器
请求样例
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 – 覆盖key序列 区分容器 , key值是
[a-Z]
orctrl-<value>
。<value>
是a-z
,@
,^
,[
,,
or_
.之一logs – 1/True/true or 0/False/false 返回日志 默认false
stream – 1/True/true or 0/False/false 返回流 默认false
stdin – 1/True/true or 0/False/false 是否开启标准输入 默认false
stdout– 1/True/true or 0/False/false 是否开启标准输出 默认false
stderr – 1/True/true or 0/False/false 是否开启标准错误 默认false
返回状态:
101 –没有错误
200 – 没有错误
400 – 参数错误
404 – 没有容器
409 - 容器已暂停
500 – 服务错误
流详情
当使用tty开启[POST /containers/create
](#create-a-container), 流数据戒子到PTY和客户端的标准输入中
当不用TTY开启时,流是 多通路描述标准输出和标准错误,
格式为 header和payload
HEADER
header中报货流的写入信息(标准输出或者标准错误),它也包括关联组成的编码在最末四位(uint32
)
他的编码在第一个八位 例如
header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}
STREAM_TYPE
可以是
0 标准输入 写向标准输出
1 标准输出
2 标准错误
SIZE1, SIZE2, SIZE3, SIZE4
是uint32
大小编码的四位,作为做大存储
PAYLOAD
流内容
实现
这是最简单的一种Attach 协议实现如下
1、读8比特 2、选择`stdout` 或者 `stderr` 以来在第一个比特 3、提出框架大小从最后4比特 4、读出提出的大小,并输出 5、重复以上
监视容器(websocket)
请求
GET /containers/(id or name)/attach/ws
监视容器(websocket)websocket协议工具要要符合RFC 6455](http://tools.ietf.org/html/rfc6455)握手标准
请求样例
GET /v1.24/containers/e90e34656806/attach/ws?logs=0&stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1
返回样例
{% raw %} {{ STREAM }} {% endraw %}
参数
detachKeys – 覆盖key序列 区分容器 , key值是
[a-Z]
orctrl-<value>
。<value>
是a-z
,@
,^
,[
,,
or_
.之一logs – 1/True/true or 0/False/false 返回日志 默认false
stream – 1/True/true or 0/False/false 返回流 默认false
stdin – 1/True/true or 0/False/false 是否开启标准输入 默认false
stdout– 1/True/true or 0/False/false 是否开启标准输出 默认false
stderr – 1/True/true or 0/False/false 是否开启标准错误 默认false
返回状态:
101 –没有错误
200 – 没有错误
400 – 参数错误
404 – 没有容器
409 - 容器已暂停
500 – 服务错误
等待容器
请求
POST /containers/(id or name)/wait
堵塞直到容器停止并返回,返回值
请求样例
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)
移除容器从文件文件系统
请求样例
DELETE /v1.24/containers/16253994b7c4?v=1 HTTP/1.1
返回样例
HTTP/1.1 204 No Content
参数:
v – 1/True/true or 0/False/false, 移除容器关联的 volumes 默认
false
.force - 1/True/true or 0/False/false,杀死容器然后移除 默认
false
.link - 1/True/true or 0/False/false, 移除容器link关联的容器. 默认
false
.
返回值:
204 – 正常
400 –参数错误
404 – 没有容器
409 – 冲突
500 – 服务错误
检索容器内的文件或文件夹信息
请求
HEAD /containers/(id or name)/archive
查看X-Docker-Container-Path-Stat
的文件夹 ,数据头在下面章节
获取容器文件系统源存档
请求
GET /containers/(id or name)/archive
获取容器文件系统源存档
参数
path 容器的文件系统源文件存档 必须,
如果不是一个绝对路径,它相对于容器的root目录path 描述的源文件必须存在,
去维护预期目录下的源文件。path的最后添加
/
或者/.
。如果path的最后是/.
表示只复制该path路径下的文件夹,连接文件一直断定到他的连接目标
注意: 不能复制某一个系统文件 /proc, /sys, /dev, 和在容器中创建的mounts
请求样例
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对象,包含一些文件系统数据有信息关于源文件存档的。下面是一个简单的离职
{ "name": "root", "size": 4096, "mode": 2147484096, "mtime": "2014-02-27T20:51:23Z", "linkTarget": "" }
如果只要这个信息 这个端点也能够做到请求头里
返回值:
200 - 成功,返回源文件存档
400 - 客户端错误 参数错误,详细描述JSON在返回值里
路径为空
没有这个路径
404 - 客户端错误 参数错误,文件源没有找到
经不存在
500 -服务错误
提取中一个文件或文件夹的存到容器中一个目录
请求
PUT /containers/(id or name)/archive
上传一个tar格式的存档到容器中的一个目录
参数:
path - 容器中的一个目录 将存档保存在里面
if不是一个绝对路径,认为相对于root目录的相对路径,路径必须存在
noOverwriteDirNonDir - 如果是1 或者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里
path 为空
path不存在
不能覆盖
403 - 客户端错误,权限不足
404 - 客户端错误,源文件不存在– 没有容器
没有目录
500 – 服务器错误
docker-ce engine API 文档翻译-容器篇
版本:V1.24
翻译者:王照民
原文地址:https://github.com/docker/docker-ce/blob/master/components/engine/docs/api/v1.24.md
容器
容器列表
GET /containers/json
请求样例:
GET /v1.24/containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1
返回容器列表 请注意他和检查一个容器信息接口的不同,这里返回的是容器信息列表
参数
参数名 | 说明 |
---|---|
all | 默认false 只返回所有正在运行的容器 |
limit | 返回最近被创建的重启数,包含未在运行状态的容器 |
size | 默认false 返回容器的大小 描述字段为 SizeRw SizeRootFs |
file | 过滤器 用于过滤返回的容器信息 以json格式编码例如{"status": ["paused"]} <br /> exited=<int> ; -- containers with exit code of <int> ;<br /> status= (created |
返回值
[ { "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": { "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": { "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": { "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": { "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": [] } ]
返回状态值:
200 - 正常
400 - 参数错误
500 - 服务器异常
创建容器
POST /containers/create
请求样例
GET /v1.24/containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1
请求参数
{ "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"] } } } }
返回值
{ "Id":"e90e34656806", "Warnings":[] }
请求参数说明
Hostname 容器的主机名 ,必须符合RFC 1123 规范 ( string类型)
Domainname 容器的域名(string类型)
User 容器的内部用户 (string类型)
AttachStdin 是否附加标准输入 (Boolean 类型)
AttachStdout 是否附加标准输出(Boolean 类型)
AttachStderr 是否附加标准错误(Boolean 类型)
Tty 是否附加标准流到 tty 如果stdin 是关闭的也将包含在内(Boolean 类型)
OpenStdin 是否打开标准输入 (Boolean 类型)
Env 环境变量列表 例如:[ "FOO=bar", "BAZ=quux"]
Labels 给容器添加标签列表 例如 { "com.example.vendor": "Acme", "com.example.license": "GPL", "com.example.version": "1.0"}
Cmd 运行指定的命令 (string类型) 例如[ "date"]
Entrypoint 设置容器的进入点
Image 设置容器所使用的镜像
Volumes 设置容器要挂载的硬盘目录 例如{ "/volumes/data": {}}
Healthcheck 用于检查容器是否健康 例如{ "Test": [ "CMD-SHELL", "curl localhost:3000" ], "Interval": 1000000000, "Timeout": 10000000000, "Retries": 10, "StartPeriod": 60000000000}
**Test** -测试可以是一下方式 : + `{}` 从镜像或者父镜像集成健康检查 + `{"NONE"}` 没有健康检查 + `{"CMD", args...}` 直接执行命名 + `{"CMD-SHELL", command}` 用shell执行命令 **Interval** - 等待健康检查的时间单位纳秒. 他可以是0或者至少1000000 (1ms ) 如果是0则继承 **Timeout** - 检查超时时间. 他可以是0或者至少1000000 (1ms ) 如果是0则继承 **Retries** - 当容器不健康时 ,重试健康检查的次数。如果是0则继承 **StartPeriod** - 容器初始化之后多久后开始健康检查. 他可以是0或者至少1000000 (1ms ) 如果是0则继承
WorkingDir 工作目录,命令将在这个目录下运行 (string类型)
NetworkDisabled 如果设置为true 将禁用容器网络(Boolean 类型)
ExposedPorts 容器内部向外暴露的端口 例如{ "22/tcp": {}}
StopSignal 容器停止信号 填写字符串或者无符号证书 默认为
SIGTERM
HostConfig 主机配置
附加docker的三种数据挂载方式:参考:https://docs.docker.com/engine/admin/volumes/#tips-for-using-bind-mounts-or-volumes 1、Volumes方式下:容器内的数据被存放到宿主机(linux)一个特定的目录下(/var/lib/docker/volumes/)。这个目录只有Docker可以管理,其他进程不能修改。如果想持久保存容器的应用数据,Volumes是Docker推荐的挂载方式。 2、Bind mounts方式下:容器内的数据被存放到宿主机文件系统的任意位置,甚至存放到一些重要的系统目录或文件中。除了Docker之外的进程也可以任意对他们进行修改; 3、tmpfs方式下:容器的数据只会存放到宿主机的内存中,不会被写到宿主机的文件系统中,因此不能持久保存容器的应用数据。
Binds 这个容器的volume 列表 列举volume字符串
host-src:container-dest 挂载一个宿主机目录到容器内 ,host-src和container-dest都必须是绝对路径 host-src:container-dest:ro 只读 挂载宿主机目录到容器内,host-src和container-dest都必须是绝对路径 volume-name:container-dest 挂载 一个volume驱动带容器内,container-dest都必须是绝对路径 volume-name:container-dest:ro 只读挂载一个volume驱动带容器内 ,container-dest都必须是绝对路径
Tmpfs 临时文件系统 这里填写一个容器内的目录map ,他们将被tmpfs 和它一直的mount选项替换,
{ "/run": "rw,noexec,nosuid,size=65536k" }
Links 容器连接列表 每一个连接都要符合
container_name:alias
格式Memory 内存限制 单位bytes
MemorySwap 全部内存限制(Memory +Swap)设置为-1 不限制swap 你必须使用memory 并且使swap的值比memory大一些
MemoryReservation 软件内存限制
KernelMemory 核心内存限制
CpuPercent 在所有有效cpu核心中允许被使用的个数 (windows 只有daemon )
CpuShares 容器cpu的共享个数 (这是一个相对其他容器的值)
CpuPeriod cpu周期时间
CpuQuota 一个cpu周期中容器能得到的cpu时间
CpusetCpus 设置
cgroups CpusetCpus
的使用值CpusetMems 允许使用的内存节点 (0-3, 0,1). 只能是在NUMA 系统中有效的
IOMaximumBandwidth 在IO地位中最大的IO绝对比例
IOMaximumIOps 每一秒的io中最大的IO绝对比例
BlkioWeight 块IO带宽(相对带宽) 只允许在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 调整容器的memory swappiness 行为 只接受0到100之间的值
OomKillDisable boolean值 是否允许OOM杀死容器
OomScoreAdj 设置OOM杀死容器 排序分数
PidMode 设置容器的PID命名空间 模式
"container:<name|id>"
加入另外一个容器的PID命名空间。"host"
使用宿主机的PID命名空间PidsLimit 调整容器的PID限制 设置为-1 则不限制
PortBindings 设置宿主机和容器的端口绑定 map
{ <port>/<protocol>: [{ "HostPort": "<port>" }] }
PublishAllPorts boolean 值 是否分配一个暂时的主机端口给容器暴露的端口。当容器停止端口被收回,当容器开启,端口被分配,当容器重启,分配的端口将改变。端口从依赖在内核上的临时端口选择。例如linux的范围在
/proc/sys/net/ipv4/ip_local_port_range
中划定Privileged boolean值 是否给容器主机的完全访问权限
ReadonlyRootfs boolean值 是否只读 挂载容器的root文件系统
Dns 容器使用的dns服务列表
DnsOptions dns配置项列表
DnsSearch dns搜索域列表
ExtraHosts hostnames/IP映射列表 将被添加到容器的
/etc/hosts
描述["hostname:IP"]
VolumesFrom 从其他容器 继承volumes 列表 描述
<container name>[:<ro|rw>]
CapAdd 核心功能添加到容器的列表
Capdrop 从容器中退出的核心功能列表
GroupAdd 附加用户组到容器,容器进程将被运行
RestartPolicy 重启策略 当容器退出时将被执行的行为 ,
Name
为always 时 一直重启 ,"unless-stopped"` 除非用户停止,否则一直重启 on-failure 只有容器退出码为非0时重启。如果on-failure被使用MaximumRetryCount 将控制最大重启次数,默认不重启 ,重启延期被加入,防止容器重启泛滥,(延期是以前的两倍,开始是100ms)UsernsMode 当用户命名空间重新映射选项打开时,设置用户命名空间的模式 支持 host
NetworkMode 设置容器的网络模式 支持的标准值是:
bridge
,host
,none
, 和container:<name|id>
.设置另外的值 则为容器连接的网络名称Devices 加入到容器中的驱动列表 例如
{ "PathOnHost": "/dev/deviceName", "PathInContainer": "/dev/deviceName", "CgroupPermissions": "mrw"}
Ulimits 设置容器不做限制的列表 例如
{ "Name": <name>, "Soft": <soft limit>, "Hard": <hard limit> }
,Ulimits: { "Name": "nofile", "Soft": 1024, "Hard": 2048 }
Sysctls 设置容器的核心参数 例如 { <name>: <Value> }
{ "net.ipv4.ip_forward": "1" }
SecurityOpt 为MLS定制的lables列表
StorageOpt 容器的存储配置 例如
{"size":"120G"}
LogConfig 容器的日志配置 例如
{ "Type": "<driver_name>", "Config": {"key1": "val1"}}
.允许的日志等级json-file
,syslog
,journald
,gelf
,fluentd
,awslogs
,splunk
,etwlogs
,none
.json-file
CgroupParent 创建容器的
cgroups
路径 如果这个路径不是绝对路径 ,这个路径被认为是初始化进程的cgroups
路径,如这个路径不存在,则会被创建VolumeDriver 容器挂载的volumes驱动列表
ShmSize
/dev/shm
的大小 这个值必须大于0 如果省略系统默认64MB
查询参数
name 分配给容器的名字 必须满足/?[a-zA-Z0-9_-]+
.
状态值
201 没有错误
400 参数错误
404 没有找到容器
406 不能进入容器(容器不在运行)
409 冲突
500 服务错误
检查容器
请求样例
GET /containers/(id or name)/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
返回值样例
{ .... "SizeRw": 0, "SizeRootFs": 972, .... }
查询参数
size 1/True/true 或者 0/False/false 容器的大小信息 .默认
false
状态值
200 没有错误
404 未找到容器
500 服务错误
容器内进程列表
请求
GET /containers/(id or name)/top
容器内正在运行的进程列表,想Unix系统本地执行ps 命令 这个命令不支持windows
请求样例
GET /v1.24/containers/4fa6e0f0c678/top HTTP/1.1
返回值样例
{ "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
样例返回值
{ "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参数 默认 -ef
状态码
200 没有错误
404 没有找到容器
500 服务错误
得到容器日志
请求
GET /containers/(id or name)/logs
得到容器的标准输出和标准错误日志
`Note:这个命令可以使用只有在容器日志驱动为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,显示标准输出日子 默认false
stderr - 1/True/true 或 0/False/false,显示标准错误日子 默认false
since – UNIX 时间戳 显示从这个时间戳之后的日志 默认为0 不进行过滤
timestamps – 1/True/true or 0/False/false, 在每行日志上打印时间戳 默认false
tail 输错末尾指定行数的日志
all
或者<number>
默认为all
状态值、
101 没有错误 关于劫持的提示代理
200 没有错误 没有找到升级信息
404 没有找到容器
500 服务器错误
查询容器文件系统改变
请求
GET /containers/(id or name)/changes
查询容器文件系统改变
样例请求
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)/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_stats
属性
查询参数
stream – 1/True/true or 0/False/false, 推送状态然后断开 默认为true
返回值
200 – 没错误
404 – 没找到容器
500 – 服务器错误
调整容器TTY
请求
POST /containers/(id or name)/resize
调整容器TTY,义字符的个数为单位 你必须重启容器生效调整
请求样例
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
开启容器
请求样例
POST /v1.24/containers/e90e34656806/start HTTP/1.1
返回值样例
HTTP/1.1 204 No Content
参数
detachKeys – 覆盖key序列 区分容器 , key值是
[a-Z]
orctrl-<value>
。<value>
是a-z
,@
,^
,[
,,
or_
.之一
返回状态:
204 –正常
304 – 容器已经启动
404 – 没有容器
500 – 服务器错误
停止容器
请求
POST /containers/(id or name)/stop
停止容器
请求样例
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
重启容器
请求样例
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
请求样例
POST /v1.24/containers/e90e34656806/kill HTTP/1.1
返回样例
HTTP/1.1 204 No Content
参数:
signal - 单独发送到容器 :整数或
SIGINT
.不设置时SIGKILL
假定等待容器退出 When not set,SIGKILL
is assumed and the call waits for the container to exit.
返回码:
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
重命名一个容器
请求样例
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
暂停容器
请求样例
POST /v1.24/containers/e90e34656806/pause HTTP/1.1
返回样例
HTTP/1.1 204 No Content
返回值:
204 –正常
404 – 没有容器
500 – 服务错误
解除暂停容器
请求
POST /containers/(id or name)/unpause
解除暂停容器
请求样例
POST /v1.24/containers/e90e34656806/unpause HTTP/1.1
返回样例
HTTP/1.1 204 No Content
返回值:
204 – 正常
404 – 没有容器
500 – 服务错误
监视容器
请求
POST /containers/(id or name)/attach
监视容器
请求样例
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 – 覆盖key序列 区分容器 , key值是
[a-Z]
orctrl-<value>
。<value>
是a-z
,@
,^
,[
,,
or_
.之一logs – 1/True/true or 0/False/false 返回日志 默认false
stream – 1/True/true or 0/False/false 返回流 默认false
stdin – 1/True/true or 0/False/false 是否开启标准输入 默认false
stdout– 1/True/true or 0/False/false 是否开启标准输出 默认false
stderr – 1/True/true or 0/False/false 是否开启标准错误 默认false
返回状态:
101 –没有错误
200 – 没有错误
400 – 参数错误
404 – 没有容器
409 - 容器已暂停
500 – 服务错误
流详情
当使用tty开启[POST /containers/create
](#create-a-container), 流数据戒子到PTY和客户端的标准输入中
当不用TTY开启时,流是 多通路描述标准输出和标准错误,
格式为 header和payload
HEADER
header中报货流的写入信息(标准输出或者标准错误),它也包括关联组成的编码在最末四位(uint32
)
他的编码在第一个八位 例如
header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}
STREAM_TYPE
可以是
0 标准输入 写向标准输出
1 标准输出
2 标准错误
SIZE1, SIZE2, SIZE3, SIZE4
是uint32
大小编码的四位,作为做大存储
PAYLOAD
流内容
实现
这是最简单的一种Attach 协议实现如下
1、读8比特 2、选择`stdout` 或者 `stderr` 以来在第一个比特 3、提出框架大小从最后4比特 4、读出提出的大小,并输出 5、重复以上
监视容器(websocket)
请求
GET /containers/(id or name)/attach/ws
监视容器(websocket)websocket协议工具要要符合RFC 6455](http://tools.ietf.org/html/rfc6455)握手标准
请求样例
GET /v1.24/containers/e90e34656806/attach/ws?logs=0&stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1
返回样例
{% raw %} {{ STREAM }} {% endraw %}
参数
detachKeys – 覆盖key序列 区分容器 , key值是
[a-Z]
orctrl-<value>
。<value>
是a-z
,@
,^
,[
,,
or_
.之一logs – 1/True/true or 0/False/false 返回日志 默认false
stream – 1/True/true or 0/False/false 返回流 默认false
stdin – 1/True/true or 0/False/false 是否开启标准输入 默认false
stdout– 1/True/true or 0/False/false 是否开启标准输出 默认false
stderr – 1/True/true or 0/False/false 是否开启标准错误 默认false
返回状态:
101 –没有错误
200 – 没有错误
400 – 参数错误
404 – 没有容器
409 - 容器已暂停
500 – 服务错误
等待容器
请求
POST /containers/(id or name)/wait
堵塞直到容器停止并返回,返回值
请求样例
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)
移除容器从文件文件系统
请求样例
DELETE /v1.24/containers/16253994b7c4?v=1 HTTP/1.1
返回样例
HTTP/1.1 204 No Content
参数:
v – 1/True/true or 0/False/false, 移除容器关联的 volumes 默认
false
.force - 1/True/true or 0/False/false,杀死容器然后移除 默认
false
.link - 1/True/true or 0/False/false, 移除容器link关联的容器. 默认
false
.
返回值:
204 – 正常
400 –参数错误
404 – 没有容器
409 – 冲突
500 – 服务错误
检索容器内的文件或文件夹信息
请求
HEAD /containers/(id or name)/archive
查看X-Docker-Container-Path-Stat
的文件夹 ,数据头在下面章节
获取容器文件系统源存档
请求
GET /containers/(id or name)/archive
获取容器文件系统源存档
参数
path 容器的文件系统源文件存档 必须,
如果不是一个绝对路径,它相对于容器的root目录path 描述的源文件必须存在,
去维护预期目录下的源文件。path的最后添加
/
或者/.
。如果path的最后是/.
表示只复制该path路径下的文件夹,连接文件一直断定到他的连接目标
注意: 不能复制某一个系统文件 /proc, /sys, /dev, 和在容器中创建的mounts
请求样例
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对象,包含一些文件系统数据有信息关于源文件存档的。下面是一个简单的离职
{ "name": "root", "size": 4096, "mode": 2147484096, "mtime": "2014-02-27T20:51:23Z", "linkTarget": "" }
如果只要这个信息 这个端点也能够做到请求头里
返回值:
200 - 成功,返回源文件存档
400 - 客户端错误 参数错误,详细描述JSON在返回值里
路径为空
没有这个路径
404 - 客户端错误 参数错误,文件源没有找到
经不存在
500 -服务错误
提取中一个文件或文件夹的存到容器中一个目录
请求
PUT /containers/(id or name)/archive
上传一个tar格式的存档到容器中的一个目录
参数:
path - 容器中的一个目录 将存档保存在里面
if不是一个绝对路径,认为相对于root目录的相对路径,路径必须存在
noOverwriteDirNonDir - 如果是1 或者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里
path 为空
path不存在
不能覆盖
403 - 客户端错误,权限不足
404 - 客户端错误,源文件不存在– 没有容器
没有目录
500 – 服务器错误