知识库 Help

Docker 启用 远程 API

要在 Docker 中启用 API,你实际上是在启用 Docker 的 远程 API,允许通过 HTTP 访问 Docker 的命令和管理功能。 默认情况下, Docker 的 API 仅限于本地访问,即只能在 Docker 守护进程所在的机器上访问。如果你想要远程访问 Docker API,你需要做一些配置。

准备工作

首先检查 Docker 服务的配置,确保 Docker 守护进程没有绑定 fd:// ,因为这是默认的本地套接字配置。

cat /usr/lib/systemd/system/docker.service

查看返回内容,找到以下部分:

[Service] ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

如果配置中包含 -H fd:// ,你需要移除它,否则会与后续操作冲突,导致 Docker 无法启动。如果没有包含 -H fd:// 参数,你可以跳过此步骤,直接进入编辑 Docker 配置文件部分。

以下是移除 -H fd:// 参数的具体步骤。

编辑 docker.conf

sudo mkdir -p /etc/systemd/system/docker.service.d sudo nano /etc/systemd/system/docker.service.d/docker.conf

添加以下内容

[Service] # 下面这一行是必须的,用于清除原有的 ExecStart ExecStart= # 下面的这一行仅供参考,根据实际情况修改。只要保证不包含 -H 参数即可 ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock

重新加载配置

sudo systemctl daemon-reload

开启 Docker API

1. 编辑 Docker 配置文件

Docker 的守护进程配置文件通常位于 /etc/docker/daemon.json,你可以编辑该文件来启用 API 的远程访问。

首先,编辑 /etc/docker/daemon.json 文件:

sudo nano /etc/docker/daemon.json

如果文件不存在,可以手动创建。

在文件中添加以下内容:

{ "hosts": [ "unix:///var/run/docker.sock", "tcp://0.0.0.0:2375" ] }
  • "unix:///var/run/docker.sock" 允许 Docker 使用 Unix 套接字(本地访问)。

  • "tcp://0.0.0.0:2375" 启用 Docker API 的远程访问,允许从所有网络接口通过端口 2375 访问 Docker API。 你可以根据需求修改 IP 地址(0.0.0.0 表示允许来自所有 IP 的连接,建议实际部署时绑定具体的 IP 地址以增强安全性)。

2. 重启 Docker 服务

修改完配置文件后,你需要重启 Docker 守护进程来应用更改:

sudo systemctl restart docker

这将使得 Docker 守护进程开始监听远程 API 请求。

3. 验证远程访问是否开启

你可以通过 curl 来验证是否能远程访问 Docker API:

curl http://<docker_host_ip>:2375/containers/json

这应该返回一个 JSON 格式的容器列表,表示 API 正常工作。

总结

启用 Docker 远程 API 后,你就可以通过 HTTP 请求来远程管理和控制 Docker 容器。请务必注意安全性,尤其是当允许从所有 IP 地址进行访问时。如果在生产环境中使用,建议通过以下措施增加安全性:

  1. 使用防火墙 限制可以访问 Docker API 的 IP 地址。

  2. 启用 TLS 加密 ,通过加密传输确保通信安全。

  3. 使用身份验证机制 来限制 API 的访问权限,例如使用 Docker 的身份验证插件。

开启远程 API 后,你可以方便地通过外部工具或自动化系统来管理 Docker 容器。不过,记住尽量限制访问权限,避免安全隐患。

如果遇到任何问题,检查配置文件和日志以确保 Docker 服务正确启动并且 API 正常响应。

Last modified: 13 March 2025