docker-ce engine API 文档翻译-容器篇



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-filejournald 时`

请求样例

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

返回样例

  
   HTTP/1.1 101 UPGRADED
   Content-Type: application/vnd.docker.raw-stream
   Connection: Upgrade
   Upgrade: tcp
  
   {% raw %}
   {{ STREAM }}
   {% endraw %}

查询参数

  • details - 1/True/true 或 0/False/false, 显示额外的日志 默认false

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

  • stdout - 1/True/true 或 0/False/false,显示标准输出日子 默认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] or ctrl-<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] or ctrl-<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, SIZE4uint32 大小编码的四位,作为做大存储

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] or ctrl-<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-filejournald 时`

请求样例

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

返回样例

  
   HTTP/1.1 101 UPGRADED
   Content-Type: application/vnd.docker.raw-stream
   Connection: Upgrade
   Upgrade: tcp
  
   {% raw %}
   {{ STREAM }}
   {% endraw %}

查询参数

  • details - 1/True/true 或 0/False/false, 显示额外的日志 默认false

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

  • stdout - 1/True/true 或 0/False/false,显示标准输出日子 默认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] or ctrl-<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] or ctrl-<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, SIZE4uint32 大小编码的四位,作为做大存储

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] or ctrl-<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 – 服务器错误

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值