Skip to content

Docker Engine API

Docker Engine 提供了 RESTful API,可以用于自动化容器管理。

API 端点

Docker Engine API 默认监听在:

  • Unix Socket: unix:///var/run/docker.sock
  • TCP: tcp://localhost:2375 (不加密)
  • TLS: tcp://localhost:2376 (加密)

启用 API

Linux

编辑 /etc/docker/daemon.json:

json
{
  "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}

启用 TLS

json
{
  "hosts": ["tcp://0.0.0.0:2376"],
  "tls": true,
  "tlsverify": true,
  "tlscacert": "/etc/docker/ca.pem",
  "tlscert": "/etc/docker/server.pem",
  "tlskey": "/etc/docker/server-key.pem"
}

使用示例

cURL

sh
# 列出容器
curl --unix-socket /var/run/docker.sock \
  http://localhost/containers/json

# 创建容器
curl -X POST --unix-socket /var/run/docker.sock \
  -H "Content-Type: application/json" \
  -d '{"Image": "nginx:latest"}' \
  http://localhost/containers/create

# 启动容器
curl -X POST --unix-socket /var/run/docker.sock \
  http://localhost/containers/{id}/start

Python

python
import docker

client = docker.DockerClient(base_url='unix://var/run/docker.sock')

# 列出容器
containers = client.containers.list()

# 创建容器
container = client.containers.run('nginx:latest', detach=True)

# 停止容器
container.stop()

Node.js

javascript
const Docker = require('dockerode');
const docker = new Docker({ socketPath: '/var/run/docker.sock' });

// 列出容器
docker.listContainers((err, containers) => {
  console.log(containers);
});

// 创建容器
docker.createContainer({ Image: 'nginx:latest' }, (err, container) => {
  container.start((err, data) => {
    console.log('Container started');
  });
});

API 参考

主要 API 端点:

  • GET /containers/json - 列出容器
  • POST /containers/create - 创建容器
  • POST /containers/{id}/start - 启动容器
  • POST /containers/{id}/stop - 停止容器
  • GET /images/json - 列出镜像
  • POST /images/create - 拉取镜像
  • POST /build - 构建镜像

完整 API 文档:https://docs.docker.com/engine/api/

安全注意事项

警告

  • 不要在生产环境暴露未加密的 API
  • 使用 TLS 加密 API 连接
  • 配置访问控制和认证
  • 限制网络访问

由 BSFC Tech 提供技术支持