Back to Blogs
docker
api

Docker Engine API

Soloman
2022-05-24

Docker Engine API

Docker引擎API是一个由Docker引擎服务的HTTP API。它是Docker客户端用来与引擎通信的API,所以Docker客户端所能做的一切都可以通过API完成。

1 容器相关

1.1 获取容器列表

请求方式:get

请求路径:/v1.46/containers/json

返回数据:

[
  {
    "Id": "8dfafdbc3a40",
    "Names": [
      "/boring_feynman"
    ],
    "Image": "ubuntu:latest",
    "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82",
    "Command": "echo 1",
    "Created": 1367854155,
    "State": "Exited",
    "Status": "Exit 0",
    "Ports": [
      {
        "PrivatePort": 2222,
        "PublicPort": 3333,
        "Type": "tcp"
      }
    ],
    "Labels": {
      "com.example.vendor": "Acme",
      "com.example.license": "GPL",
      "com.example.version": "1.0"
    },
    "SizeRw": 12288,
    "SizeRootFs": 0,
    "HostConfig": {
      "NetworkMode": "default",
      "Annotations": {
        "io.kubernetes.docker.type": "container"
      }
    },
    "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": ""
      }
    ]
  },
  {...},
  {...},
  {...}
]

1.2 创建一个新容器

请求方式:post

请求路径:/v1.46/containers/create

请求参数:

{
  "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": {}
  },
  "WorkingDir": "",
  "NetworkDisabled": false,
  "MacAddress": "12:34:56:78:9a:bc",
  "ExposedPorts": {
    "22/tcp": {}
  },
  "StopSignal": "SIGTERM",
  "StopTimeout": 10,
  "HostConfig": {
    "Binds": [
      "/tmp:/tmp"
    ],
    "Links": [
      "redis3:redis"
    ],
    "Memory": 0,
    "MemorySwap": 0,
    "MemoryReservation": 0,
    "NanoCpus": 500000,
    "CpuPercent": 80,
    "CpuShares": 512,
    "CpuPeriod": 100000,
    "CpuRealtimePeriod": 1000000,
    "CpuRealtimeRuntime": 10000,
    "CpuQuota": 50000,
    "CpusetCpus": "0,1",
    "CpusetMems": "0,1",
    "MaximumIOps": 0,
    "MaximumIOBps": 0,
    "BlkioWeight": 300,
    "BlkioWeightDevice": [
      {}
    ],
    "BlkioDeviceReadBps": [
      {}
    ],
    "BlkioDeviceReadIOps": [
      {}
    ],
    "BlkioDeviceWriteBps": [
      {}
    ],
    "BlkioDeviceWriteIOps": [
      {}
    ],
    "DeviceRequests": [
      {
        "Driver": "nvidia",
        "Count": -1,
        "DeviceIDs\"": [
          "0",
          "1",
          "GPU-fef8089b-4820-abfc-e83e-94318197576e"
        ],
        "Capabilities": [
          [
            "gpu",
            "nvidia",
            "compute"
          ]
        ],
        "Options": {
          "property1": "string",
          "property2": "string"
        }
      }
    ],
    "MemorySwappiness": 60,
    "OomKillDisable": false,
    "OomScoreAdj": 500,
    "PidMode": "",
    "PidsLimit": 0,
    "PortBindings": {
      "22/tcp": [
        {
          "HostPort": "11022"
        }
      ]
    },
    "PublishAllPorts": false,
    "Privileged": false,
    "ReadonlyRootfs": false,
    "Dns": [
      "8.8.8.8"
    ],
    "DnsOptions": [
      ""
    ],
    "DnsSearch": [
      ""
    ],
    "VolumesFrom": [
      "parent",
      "other:ro"
    ],
    "CapAdd": [
      "NET_ADMIN"
    ],
    "CapDrop": [
      "MKNOD"
    ],
    "GroupAdd": [
      "newgroup"
    ],
    "RestartPolicy": {
      "Name": "",
      "MaximumRetryCount": 0
    },
    "AutoRemove": true,
    "NetworkMode": "bridge",
    "Devices": [],
    "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"
        ]
      },
      "database_nw": {}
    }
  }
}

返回数据:容器ID

{
  "Id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743",
  "Warnings": []
}

1.3 获取单个容器信息

请求方式:get

请求路径:/v1.46/containers/{id}/json

返回数据:容器的详细信息json

1.4 获取单个容器内的运行进程信息

请求方式:get

请求路径:/v1.46/containers/{id}/top

返回数据:

{
  "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"
    ]
  ]
}

1.5 获取容器日志

从容器获取标准输出和标准错误日志。注意:此端点仅适用于具有 json-filejournald日志驱动程序的容器。

请求方式:get

请求路径:/v1.46/containers/{id}/logs

返回数据:流式响应数据

1.6 获取容器内文件变化信息

返回容器文件系统中哪些文件被添加、删除或修改。这种修改可以是以下三种:

  • 0: Modified ("C")
  • 1: Added ("A")
  • 2: Deleted ("D")

请求方式:get

请求路径:/v1.46/containers/{id}/changes

返回数据:

[
  {
    "Path": "/dev",
    "Kind": 0
  },
  {
    "Path": "/dev/kmsg",
    "Kind": 1
  },
  {
    "Path": "/test",
    "Kind": 1
  }
]

1.7 导出容器内容

将容器的内容导出为tarball文件

请求方式:get

请求路径:/v1.46/containers/{id}/export

1.8 获取容器资源使用情况

该端点返回容器资源使用统计数据的实时流数据。

请求方式:get

请求路径:/v1.46/containers/{id}/stats

返回数据:

{
  "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,
    "online_cpus": 4,
    "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,
    "online_cpus": 4,
    "throttling_data": {
      "periods": 0,
      "throttled_periods": 0,
      "throttled_time": 0
    }
  }
}

1.9 启动容器

请求方式:post

请求路径:/v1.46/containers/{id}/start

1.10 停止容器

请求方式:post

请求路径:/v1.46/containers/{id}/stop

1.11 重启容器

请求方式:post

请求路径:/v1.46/containers/{id}/restart

1.12 杀死容器

向容器发送POSIX信号,默认为kill。

请求方式:post

请求路径:/v1.46/containers/{id}/kill

1.13 更新容器

更改容器的各种配置选项,而无需重新创建它。

请求方式:post

请求路径:/v1.46/containers/{id}/update

请求参数:

{
  "BlkioWeight": 300,
  "CpuShares": 512,
  "CpuPeriod": 100000,
  "CpuQuota": 50000,
  "CpuRealtimePeriod": 1000000,
  "CpuRealtimeRuntime": 10000,
  "CpusetCpus": "0,1",
  "CpusetMems": "0",
  "Memory": 314572800,
  "MemorySwap": 514288000,
  "MemoryReservation": 209715200,
  "RestartPolicy": {
    "MaximumRetryCount": 4,
    "Name": "on-failure"
  }
}

1.14 重命名容器

请求方式:post

请求路径:/v1.46/containers/{id}/rename

请求参数:name - 容器的新名称

1.15 暂停容器

使用 freeze cgroup 暂停容器中的所有进程。一般情况下当挂起进程时,会使用 SIGSTOP 信号,被挂起的进程可以观察到该信号。 对于 freeze cgroup,进程不知道也无法捕获它正在被挂起,然后又恢复。

请求方式:post

请求路径:/v1.46/containers/{id}/pause

1.16 恢复已暂停的容器

请求方式:post

请求路径:/v1.46/containers/{id}/unpause

1.17 移除单个容器

请求方式:delete

请求路径:/v1.46/containers/{id}

1.18 删除已停止容器

请求方式:post

请求路径:/v1.46/containers/prune

返回数据:

{
  "ContainersDeleted": [
    "string"
  ],
  "SpaceReclaimed": 0
}

2 镜像相关

2.1 获取所有镜像信息

请求方式:get

请求路径:/v1.46/images/json

返回数据:

[
  {
    "Id": "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710",
    "ParentId": "",
    "RepoTags": [
      "example:1.0",
      "example:latest",
      "example:stable",
      "internal.registry.example.com:5000/example:1.0"
    ],
    "RepoDigests": [
      "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb",
      "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578"
    ],
    "Created": "1644009612",
    "Size": 172064416,
    "SharedSize": 1239828,
    "VirtualSize": 172064416,
    "Labels": {
      "com.example.some-label": "some-value",
      "com.example.some-other-label": "some-other-value"
    },
    "Containers": 2
  }
]

2.2 打包镜像

请求方式:post

请求路径:/v1.46/build

请求参数:Dockerfile

2.3 清理打包镜像的缓存

请求方式:post

请求路径:/v1.46/build/prune

返回数据:

{
  "CachesDeleted": [
    "string"
  ],
  "SpaceReclaimed": 0
}

2.4 拉取或导入镜像

请求方式:post

请求路径:/v1.46/images/create

请求参数:fromImage、fromSrc

2.5 获取镜像信息

请求方式:get

请求路径:/v1.46/images/{name}/json

返回数据:

{
  "Id": "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710",
  "RepoTags": [
    "example:1.0",
    "example:latest",
    "example:stable",
    "internal.registry.example.com:5000/example:1.0"
  ],
  "RepoDigests": [
    "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb",
    "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578"
  ],
  "Parent": "",
  "Comment": "",
  "Created": "2022-02-04T21:20:12.497794809Z",
  "DockerVersion": "27.0.1",
  "Author": "",
  "Config": {
    "Hostname": "",
    "Domainname": "",
    "User": "web:web",
    "AttachStdin": false,
    "AttachStdout": false,
    "AttachStderr": false,
    "ExposedPorts": {
      "80/tcp": {},
      "443/tcp": {}
    },
    "Tty": false,
    "OpenStdin": false,
    "StdinOnce": false,
    "Env": [
      "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    ],
    "Cmd": [
      "/bin/sh"
    ],
    "Healthcheck": {
      "Test": [
        "string"
      ],
      "Interval": 0,
      "Timeout": 0,
      "Retries": 0,
      "StartPeriod": 0,
      "StartInterval": 0
    },
    "ArgsEscaped": true,
    "Image": "",
    "Volumes": {
      "/app/data": {},
      "/app/config": {}
    },
    "WorkingDir": "/public/",
    "Entrypoint": [],
    "OnBuild": [],
    "Labels": {
      "com.example.some-label": "some-value",
      "com.example.some-other-label": "some-other-value"
    },
    "StopSignal": "SIGTERM",
    "Shell": [
      "/bin/sh",
      "-c"
    ]
  },
  "Architecture": "arm",
  "Variant": "v7",
  "Os": "linux",
  "OsVersion": "",
  "Size": 1239828,
  "VirtualSize": 1239828,
  "GraphDriver": {
    "Name": "overlay2",
    "Data": {
      "MergedDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/merged",
      "UpperDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/diff",
      "WorkDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/work"
    }
  },
  "RootFS": {
    "Type": "layers",
    "Layers": [
      "sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6",
      "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef"
    ]
  },
  "Metadata": {
    "LastTagTime": "2022-02-28T14:40:02.623929178Z"
  }
}

2.6 获取镜像的历史信息

请求方式:get

请求路径:/v1.46/images/{name}/history

返回数据:

[
  {
    "Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710",
    "Created": 1398108230,
    "CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /",
    "Tags": [
      "ubuntu:lucid",
      "ubuntu:10.04"
    ],
    "Size": 182964289,
    "Comment": ""
  },
  {
    "Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8",
    "Created": 1398108222,
    "CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi <admwiggin@gmail.com> - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/",
    "Tags": [],
    "Size": 0,
    "Comment": ""
  },
  {
    "Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158",
    "Created": 1371157430,
    "CreatedBy": "",
    "Tags": [
      "scratch12:latest",
      "scratch:latest"
    ],
    "Size": 0,
    "Comment": "Imported from -"
  }
]

2.7 推送镜像

请求方式:post

请求路径:/v1.46/images/{name}/push

请求参数:tag、platform

2.8 给镜像添加标签

请求方式:post

请求路径:/v1.46/images/{name}/tag

返回数据:repo、tag

2.9 移除镜像

请求方式:delete

请求路径:/v1.46/images/{name}

返回数据:

[
  {
    "Untagged": "3e2f21a89f"
  },
  {
    "Deleted": "3e2f21a89f"
  },
  {
    "Deleted": "53b4f83ac9"
  }
]

2.10 在 Docker Hub 上搜索镜像

请求方式:get

请求路径:/v1.46/images/search

请求参数:term、limit、filters

返回数据:

[
  {
    "description": "A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size!",
    "is_official": true,
    "is_automated": false,
    "name": "alpine",
    "star_count": 10093
  },
  {
    "description": "Busybox base image.",
    "is_official": true,
    "is_automated": false,
    "name": "Busybox base image.",
    "star_count": 3037
  },
  {
    "description": "The PostgreSQL object-relational database system provides reliability and data integrity.",
    "is_official": true,
    "is_automated": false,
    "name": "postgres",
    "star_count": 12408
  }
]

2.11 删除未使用的镜像

请求方式:post

请求路径:/v1.46/images/prune

返回数据:

{
  "ImagesDeleted": [
    {
      "Untagged": "string",
      "Deleted": "string"
    }
  ],
  "SpaceReclaimed": 0
}

2.12 从容器创建新镜像

请求方式:post

请求路径:/v1.46/commit

请求参数:

{
  "Hostname": "439f4e91bd1d",
  "Domainname": "string",
  "User": "string",
  "AttachStdin": false,
  "AttachStdout": true,
  "AttachStderr": true,
  "ExposedPorts": {
    "80/tcp": {},
    "443/tcp": {}
  },
  "Tty": false,
  "OpenStdin": false,
  "StdinOnce": false,
  "Env": [
    "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  ],
  "Cmd": [
    "/bin/sh"
  ],
  "Healthcheck": {
    "Test": [
      "string"
    ],
    "Interval": 0,
    "Timeout": 0,
    "Retries": 0,
    "StartPeriod": 0,
    "StartInterval": 0
  },
  "ArgsEscaped": false,
  "Image": "example-image:1.0",
  "Volumes": {
    "property1": {},
    "property2": {}
  },
  "WorkingDir": "/public/",
  "Entrypoint": [],
  "NetworkDisabled": true,
  "MacAddress": "string",
  "OnBuild": [],
  "Labels": {
    "com.example.some-label": "some-value",
    "com.example.some-other-label": "some-other-value"
  },
  "StopSignal": "SIGTERM",
  "StopTimeout": 10,
  "Shell": [
    "/bin/sh",
    "-c"
  ]
}

返回数据:

{
  "Id": "string"
}

2.13 导出镜像为压缩包

请求方式:get

请求路径:/v1.46/images/{name}/get

请求参数:镜像名称或ID

2.14 导入镜像

请求方式:post

请求路径:/v1.46/images/load

请求参数:包含镜像的压缩文件数据

3 网络相关

3.1 获取网络列表

请求方式:get

请求路径:/v1.46/networks

请求参数:filters

返回数据:

[
  {
    "Name": "bridge",
    "Id": "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566",
    "Created": "2016-10-19T06:21:00.416543526Z",
    "Scope": "local",
    "Driver": "bridge",
    "EnableIPv6": false,
    "Internal": false,
    "Attachable": false,
    "Ingress": false,
    "IPAM": {
      "Driver": "default",
      "Config": [
        {
          "Subnet": "172.17.0.0/16"
        }
      ]
    },
    "Options": {
      "com.docker.network.bridge.default_bridge": "true",
      "com.docker.network.bridge.enable_icc": "true",
      "com.docker.network.bridge.enable_ip_masquerade": "true",
      "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
      "com.docker.network.bridge.name": "docker0",
      "com.docker.network.driver.mtu": "1500"
    }
  },
  {
    "Name": "none",
    "Id": "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794",
    "Created": "0001-01-01T00:00:00Z",
    "Scope": "local",
    "Driver": "null",
    "EnableIPv6": false,
    "Internal": false,
    "Attachable": false,
    "Ingress": false,
    "IPAM": {
      "Driver": "default",
      "Config": []
    },
    "Containers": {},
    "Options": {}
  },
  {
    "Name": "host",
    "Id": "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e",
    "Created": "0001-01-01T00:00:00Z",
    "Scope": "local",
    "Driver": "host",
    "EnableIPv6": false,
    "Internal": false,
    "Attachable": false,
    "Ingress": false,
    "IPAM": {
      "Driver": "default",
      "Config": []
    },
    "Containers": {},
    "Options": {}
  }
]

3.2 获取网络详细信息

请求方式:get

请求路径:/v1.46/networks/{id}

返回数据:

{
  "Name": "my_network",
  "Id": "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99",
  "Created": "2016-10-19T04:33:30.360899459Z",
  "Scope": "local",
  "Driver": "overlay",
  "EnableIPv6": false,
  "IPAM": {
    "Driver": "default",
    "Config": [
      {
        "Subnet": "172.20.0.0/16",
        "IPRange": "172.20.10.0/24",
        "Gateway": "172.20.10.11",
        "AuxiliaryAddresses": {
          "property1": "string",
          "property2": "string"
        }
      }
    ],
    "Options": {
      "foo": "bar"
    }
  },
  "Internal": false,
  "Attachable": false,
  "Ingress": false,
  "ConfigFrom": {
    "Network": "config_only_network_01"
  },
  "ConfigOnly": false,
  "Containers": {
    "19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c": {
      "Name": "test",
      "EndpointID": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a",
      "MacAddress": "02:42:ac:13:00:02",
      "IPv4Address": "172.19.0.2/16",
      "IPv6Address": ""
    }
  },
  "Options": {
    "com.docker.network.bridge.default_bridge": "true",
    "com.docker.network.bridge.enable_icc": "true",
    "com.docker.network.bridge.enable_ip_masquerade": "true",
    "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
    "com.docker.network.bridge.name": "docker0",
    "com.docker.network.driver.mtu": "1500"
  },
  "Labels": {
    "com.example.some-label": "some-value",
    "com.example.some-other-label": "some-other-value"
  },
  "Peers": [
    {
      "Name": "6869d7c1732b",
      "IP": "10.133.77.91"
    }
  ]
}

3.3 移除网络

请求方式:delete

请求路径:/v1.46/networks/{id}

3.4 创建网络

请求方式:post

请求路径:/v1.46/networks/create

请求参数:

{
  "Name": "my_network",
  "Driver": "bridge",
  "Scope": "string",
  "Internal": true,
  "Attachable": true,
  "Ingress": false,
  "ConfigOnly": false,
  "ConfigFrom": {
    "Network": "config_only_network_01"
  },
  "IPAM": {
    "Driver": "default",
    "Config": [
      {
        "Subnet": "172.20.0.0/16",
        "IPRange": "172.20.10.0/24",
        "Gateway": "172.20.10.11",
        "AuxiliaryAddresses": {
          "property1": "string",
          "property2": "string"
        }
      }
    ],
    "Options": {
      "foo": "bar"
    }
  },
  "EnableIPv6": true,
  "Options": {
    "com.docker.network.bridge.default_bridge": "true",
    "com.docker.network.bridge.enable_icc": "true",
    "com.docker.network.bridge.enable_ip_masquerade": "true",
    "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
    "com.docker.network.bridge.name": "docker0",
    "com.docker.network.driver.mtu": "1500"
  },
  "Labels": {
    "com.example.some-label": "some-value",
    "com.example.some-other-label": "some-other-value"
  }
}

返回数据:

{
  "Id": "b5c4fc71e8022147cd25de22b22173de4e3b170134117172eb595cb91b4e7e5d",
  "Warning": ""
}

3.5 将容器连接到网络

该网络必须是本地范围的网络或具有可连接选项集的群集范围的网络。不能将网络重新连接到正在运行的容器

请求方式:post

请求路径:/v1.46/networks/{id}/connect

请求参数:

{
  "Container": "3613f73ba0e4",
  "EndpointConfig": {
    "IPAMConfig": {
      "IPv4Address": "172.24.56.89",
      "IPv6Address": "2001:db8::5689"
    },
    "MacAddress": "02:42:ac:12:05:02"
  }
}

3.6 断开容器与网络的连接

请求方式:post

请求路径:/v1.46/networks/{id}/disconnect

请求参数:

{
  "Container": "string",
  "Force": true
}

3.7 删除未使用的网络

请求方式:post

请求路径:/v1.46/networks/prune

请求参数:filters

返回数据:

{
  "NetworksDeleted": [
    "string"
  ]
}

4 存储相关

4.1 列出所有存储卷

请求方式:get

请求路径:/v1.46/volumes

返回数据:

{
  "Volumes": [
    {
      "Name": "tardis",
      "Driver": "custom",
      "Mountpoint": "/var/lib/docker/volumes/tardis",
      "CreatedAt": "2016-06-07T20:31:11.853781916Z",
      "Status": {
        "hello": "world"
      },
      "Labels": {
        "com.example.some-label": "some-value",
        "com.example.some-other-label": "some-other-value"
      },
      "Scope": "local",
      "ClusterVolume": {
        "ID": "string",
        "Version": {
          "Index": 373531
        },
        "CreatedAt": "string",
        "UpdatedAt": "string",
        "Spec": {
          "Group": "string",
          "AccessMode": {
            "Scope": "single",
            "Sharing": "none",
            "MountVolume": {},
            "Secrets": [
              {
                "Key": "string",
                "Secret": "string"
              }
            ],
            "AccessibilityRequirements": {
              "Requisite": [
                {
                  "property1": "string",
                  "property2": "string"
                }
              ],
              "Preferred": [
                {
                  "property1": "string",
                  "property2": "string"
                }
              ]
            },
            "CapacityRange": {
              "RequiredBytes": 0,
              "LimitBytes": 0
            },
            "Availability": "active"
          }
        },
        "Info": {
          "CapacityBytes": 0,
          "VolumeContext": {
            "property1": "string",
            "property2": "string"
          },
          "VolumeID": "string",
          "AccessibleTopology": [
            {
              "property1": "string",
              "property2": "string"
            }
          ]
        },
        "PublishStatus": [
          {
            "NodeID": "string",
            "State": "pending-publish",
            "PublishContext": {
              "property1": "string",
              "property2": "string"
            }
          }
        ]
      },
      "Options": {
        "device": "tmpfs",
        "o": "size=100m,uid=1000",
        "type": "tmpfs"
      },
      "UsageData": {
        "Size": -1,
        "RefCount": -1
      }
    }
  ],
  "Warnings": []
}

4.2 创建储存卷

请求方式:post

请求路径:/v1.46/volumes/create

请求参数:

{
  "Name": "tardis",
  "Driver": "custom",
  "DriverOpts": {
    "device": "tmpfs",
    "o": "size=100m,uid=1000",
    "type": "tmpfs"
  },
  "Labels": {
    "com.example.some-label": "some-value",
    "com.example.some-other-label": "some-other-value"
  },
  "ClusterVolumeSpec": {
    "Group": "string",
    "AccessMode": {
      "Scope": "single",
      "Sharing": "none",
      "MountVolume": {},
      "Secrets": [
        {
          "Key": "string",
          "Secret": "string"
        }
      ],
      "AccessibilityRequirements": {
        "Requisite": [
          {
            "property1": "string",
            "property2": "string"
          }
        ],
        "Preferred": [
          {
            "property1": "string",
            "property2": "string"
          }
        ]
      },
      "CapacityRange": {
        "RequiredBytes": 0,
        "LimitBytes": 0
      },
      "Availability": "active"
    }
  }
}

返回数据:

{
  "Name": "tardis",
  "Driver": "custom",
  "Mountpoint": "/var/lib/docker/volumes/tardis",
  "CreatedAt": "2016-06-07T20:31:11.853781916Z",
  "Status": {
    "hello": "world"
  },
  "Labels": {
    "com.example.some-label": "some-value",
    "com.example.some-other-label": "some-other-value"
  },
  "Scope": "local",
  "ClusterVolume": {
    "ID": "string",
    "Version": {
      "Index": 373531
    },
    "CreatedAt": "string",
    "UpdatedAt": "string",
    "Spec": {
      "Group": "string",
      "AccessMode": {
        "Scope": "single",
        "Sharing": "none",
        "MountVolume": {},
        "Secrets": [
          {
            "Key": "string",
            "Secret": "string"
          }
        ],
        "AccessibilityRequirements": {
          "Requisite": [
            {
              "property1": "string",
              "property2": "string"
            }
          ],
          "Preferred": [
            {
              "property1": "string",
              "property2": "string"
            }
          ]
        },
        "CapacityRange": {
          "RequiredBytes": 0,
          "LimitBytes": 0
        },
        "Availability": "active"
      }
    },
    "Info": {
      "CapacityBytes": 0,
      "VolumeContext": {
        "property1": "string",
        "property2": "string"
      },
      "VolumeID": "string",
      "AccessibleTopology": [
        {
          "property1": "string",
          "property2": "string"
        }
      ]
    },
    "PublishStatus": [
      {
        "NodeID": "string",
        "State": "pending-publish",
        "PublishContext": {
          "property1": "string",
          "property2": "string"
        }
      }
    ]
  },
  "Options": {
    "device": "tmpfs",
    "o": "size=100m,uid=1000",
    "type": "tmpfs"
  },
  "UsageData": {
    "Size": -1,
    "RefCount": -1
  }
}

4.3 查看存储卷详细信息

请求方式:get

请求路径:/v1.46/volumes/{name}

返回数据:

{
  "Name": "tardis",
  "Driver": "custom",
  "Mountpoint": "/var/lib/docker/volumes/tardis",
  "CreatedAt": "2016-06-07T20:31:11.853781916Z",
  "Status": {
    "hello": "world"
  },
  "Labels": {
    "com.example.some-label": "some-value",
    "com.example.some-other-label": "some-other-value"
  },
  "Scope": "local",
  "ClusterVolume": {
    "ID": "string",
    "Version": {
      "Index": 373531
    },
    "CreatedAt": "string",
    "UpdatedAt": "string",
    "Spec": {
      "Group": "string",
      "AccessMode": {
        "Scope": "single",
        "Sharing": "none",
        "MountVolume": {},
        "Secrets": [
          {
            "Key": "string",
            "Secret": "string"
          }
        ],
        "AccessibilityRequirements": {
          "Requisite": [
            {
              "property1": "string",
              "property2": "string"
            }
          ],
          "Preferred": [
            {
              "property1": "string",
              "property2": "string"
            }
          ]
        },
        "CapacityRange": {
          "RequiredBytes": 0,
          "LimitBytes": 0
        },
        "Availability": "active"
      }
    },
    "Info": {
      "CapacityBytes": 0,
      "VolumeContext": {
        "property1": "string",
        "property2": "string"
      },
      "VolumeID": "string",
      "AccessibleTopology": [
        {
          "property1": "string",
          "property2": "string"
        }
      ]
    },
    "PublishStatus": [
      {
        "NodeID": "string",
        "State": "pending-publish",
        "PublishContext": {
          "property1": "string",
          "property2": "string"
        }
      }
    ]
  },
  "Options": {
    "device": "tmpfs",
    "o": "size=100m,uid=1000",
    "type": "tmpfs"
  },
  "UsageData": {
    "Size": -1,
    "RefCount": -1
  }
}

4.4 删除存储卷

请求方式:delete

请求路径:/v1.46/volumes/{name}

4.5 删除所有未使用的存储卷

请求方式:post

请求路径:/v1.46/volumes/prune

请求参数:filters

返回数据:

{
  "VolumesDeleted": [
    "string"
  ],
  "SpaceReclaimed": 0
}

5 在容器内执行命令

要在容器中执行命令,首先需要创建一个 exec 实例,然后启动它。 这两个 API 端点包含在一个命令行命令 docker exec 中。

5.1 创建一个执行实例

请求方式:post

请求路径:/v1.46/containers/{id}/exec

请求参数:

{
  "AttachStdin": false,
  "AttachStdout": true,
  "AttachStderr": true,
  "DetachKeys": "ctrl-p,ctrl-q",
  "Tty": false,
  "Cmd": [
    "date"
  ],
  "Env": [
    "FOO=bar",
    "BAZ=quux"
  ]
}

返回数据:

{
  "Id": "string"
}

5.2 启动一个执行实例

启动先前设置的 exec 实例。 如果 detach 为 true,则该端点在启动命令后立即返回。 否则,它会使用该命令建立交互式会话。

请求方式:post

请求路径:/v1.46/exec/{id}/start

返回数据:

{
  "Detach": false,
  "Tty": true,
  "ConsoleSize": [
    80,
    64
  ]
}

6 参考资料