docker客户端与守护进程通过rest api通信,默认使用/var/run/docker.sock unix套接字;远程通信需配置tcp监听(如2375或tls加密的2376),客户端通过docker_host指定地址;所有命令均转为http请求由api server调度执行;权限控制依赖套接字文件属组或tls/防火墙策略。

Docker 客户端与守护进程之间通过 REST API 通信,底层使用 UNIX 套接字或 TCP 网络接口作为传输通道。
默认走 UNIX 套接字
守护进程启动后,默认监听 /var/run/docker.sock 这个本地 UNIX 套接字文件。客户端(比如你敲 docker ps)会自动连接这个路径,把命令封装成 HTTP 请求发过去,守护进程接收、解析、执行,再把结果以 HTTP 响应形式返回。整个过程对用户透明,但本质是标准的 REST 调用。
远程通信靠配置 TCP 接口
如果想让客户端连别的机器上的守护进程,就得手动启用 TCP 监听。常见做法是在启动守护进程时加参数:
-
-H tcp://0.0.0.0:2375(不加密,仅限可信内网) -
-H tcp://0.0.0.0:2376 --tlsverify --tlscacert=...(启用 TLS 加密,生产环境必须)
配置完后,客户端可通过DOCKER_HOST=tcp://<ip>:2376</ip>指定目标地址。
所有操作都经过 API 层
无论 docker run、docker build 还是 docker volume ls,客户端都不会直接调用系统命令或修改文件,而是统一转成对应 HTTP 方法(GET/POST/DELETE)和路径(如 /containers/create),由守护进程的 API Server 统一调度后端模块(graphdriver、networkdriver、execdriver 等)完成具体动作。
权限和安全控制在套接字层面
UNIX 套接字文件 /var/run/docker.sock 默认属主是 root,且权限为 srw-rw----。这意味着只有 root 或 docker 组成员才能访问——这也是为什么普通用户要加到 docker 组才能免 sudo 执行 docker 命令。TCP 方式则需额外配置 TLS 证书或防火墙策略来限制访问来源。











