Docker 提供了多种 API 接口,可以通过这些接口管理容器、镜像、网络等。以下是调用 Docker API 的主要方法:
Docker Engine API 是 RESTful API,默认监听在 Unix socket /var/run/docker.sock
或 TCP 端口 2375/2376。
# 使用 curl 调用
curl --unix-socket /var/run/docker.sock http://localhost/v1.41/containers/json
# 查看所有 API 端点
curl --unix-socket /var/run/docker.sock http://localhost/v1.41/_ping
# 先配置 Docker 启用 TCP 监听
# 编辑 /etc/docker/daemon.json 添加:
{
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}
# 然后重启 Docker
sudo systemctl restart docker
# 通过 TCP 调用
curl http://localhost:2375/v1.41/containers/json
GET /containers/json
POST /containers/create
POST /containers/{id}/start
POST /containers/{id}/stop
DELETE /containers/{id}
GET /images/json
POST /build
Docker 提供了多种语言的 SDK:
import docker
client = docker.DockerClient(base_url='unix://var/run/docker.sock')
# 列出所有容器
for container in client.containers.list():
print(container.id)
# 运行新容器
client.containers.run('alpine', 'echo hello world')
package main
import (
"context"
"fmt"
"github.com/docker/docker/api/types"
"github.com/docker/docker/client"
)
func main() {
cli, err := client.NewClientWithOpts(client.FromEnv)
if err != nil {
panic(err)
}
containers, err := cli.ContainerList(context.Background(), types.ContainerListOptions{})
if err != nil {
panic(err)
}
for _, container := range containers {
fmt.Printf("%s %s\n", container.ID[:10], container.Image)
}
}
用于与镜像仓库交互 (如 Docker Hub):
# 获取镜像标签列表
curl https://registry.hub.docker.com/v2/repositories/library/nginx/tags/
# 认证后拉取镜像信息
curl -u username:password https://registry.hub.docker.com/v2/
Docker API 有版本控制,URL 中的 v1.41
对应 API 版本。可以使用以下命令查看 Docker 版本和支持的 API 版本:
docker version
curl --unix-socket /var/run/docker.sock http://localhost/version
希望这些信息对您有所帮助!如需更具体的 API 调用示例,请告诉我您想实现的具体功能。