Docker客户端与守护进程通过RESTful API通信,默认使用Unix套接字(/var/run/docker.sock),支持TCP远程连接;本地通信不经过网络栈,高效安全,需用户加入docker组以免sudo权限。
docker 客户端与守护进程通过标准通信机制完成交互,本质是客户端发起请求、守护进程响应执行的 c/s 模式。默认走本地 unix 套接字,也可配置为 tcp 连接,全部基于 restful api 协议。
默认使用 Unix 套接字通信
本地操作时,Docker 客户端不经过网络栈,直接读写 /var/run/docker.sock 文件。这是最高效、最安全的方式:
- 套接字文件权限应为 srw-rw----,所属组为 docker
- 普通用户需加入 docker 组才能免 sudo 访问,否则每次调用都会触发权限校验延迟
- 可用 socat 手动测试连通性:
sudo timeout 2 socat - /var/run/docker.sock GET /version HTTP/1.0
EOF
支持 TCP 方式实现远程控制
当需要跨主机管理容器时,守护进程可监听 TCP 端口(如 2375 或 2376),客户端通过 IP+端口连接:
- 守护进程需在 /etc/docker/daemon.json 中添加 "hosts": ["tcp://0.0.0.0:2375"] 并重启服务
- 生产环境必须启用 TLS 加密(端口通常为 2376),配合 DOCKER_TLS_VERIFY=1 和 DOCKER_CERT_PATH 使用
- 内网调试可临时开放 2375,但务必限制防火墙访问源 IP,禁用公网暴露
客户端靠环境变量灵活切换连接目标
无需改代码或重编译,只需设置标准环境变量即可让客户端指向不同守护进程:
- DOCKER_HOST:指定地址,例如 unix:///var/run/docker.sock 或 tcp://192.168.1.10:2376
- DOCKER_TLS_VERIFY 和 DOCKER_CERT_PATH:启用并定位 TLS 证书目录
- DOCKER_API_VERSION:显式指定 API 版本(如 1.45),避免自动协商开销
- 临时生效:export DOCKER_HOST=tcp://localhost:2376;永久生效可写入 ~/.bashrc
所有通信都基于 Docker Engine REST API
无论走 socket 还是 TCP,底层都是 HTTP 请求响应模型。客户端把 docker ps、docker run 等命令转成对应 API 路径(如 GET /containers/json)发送过去,守护进程解析后调用内部 handler 处理,再返回 JSON 格式结果。
这意味着任何能发 HTTP 请求的工具(curl、Postman、Python requests)都能直接调用守护进程,不依赖 docker CLI。


















