Docker引擎API接入配置
Docker引擎API接入配置
全文链接:Docker引擎API接入配置
说明 Docker EngineHTTP API的能力与接入形态、2375 / 2376端口含义、Linux(systemd)下默认仅 Unix Socket 的行为,以及如何检查与为本机开启TCP接入(如
DOCKER_HOST=tcp://127.0.0.1:2375)。适用于需通过 HTTP 调用 Docker 的应用与运维场景;细节以当前 Engine 版本及 Docker Engine API 为准。
一、API 介绍:接入后能做什么
Docker 守护进程(dockerd)对外提供REST 风格的 Engine HTTP API(Docker Engine API)。通过TCP或Unix 套接字上的同源协议接入后,效果等价于把 Docker 变成可被 HTTP 客户端调用的服务——能力与终端docker子命令一致(容器/镜像/网络等),调用方式由 CLI 换为 HTTP。
dockerCLI 与 API:CLI 在多数场景下同样调用该 API,并非另一套私有协议。- 典型用途:自研平台启停实训容器、CI/CD、脚本用
curl健康检查或批量查询等。
请求路径需带API 版本前缀,形如/v1.xx/。可先取本机支持版本再写死路径:
# TCP 示例(需已监听 2375,见后文)curl-shttp://127.0.0.1:2375/version# Unix Socket 示例(与是否开启 2375 无关)curl-s--unix-socket /run/docker.sock http://localhost/version响应 JSON 中ApiVersion与 URL 中v1.47等对应。
示例:用 HTTP 列出容器(对应docker ps)
GET /containers/json;all=true时接近docker ps -a。将${API_VER}换为/version返回值(如1.47)。
仅运行中:
API_VER=1.47# 按本机 /version 修改curl-s"http://127.0.0.1:2375/v${API_VER}/containers/json"含已退出:
curl-s"http://127.0.0.1:2375/v${API_VER}/containers/json?all=true"Unix Socket:
curl-s--unix-socket /run/docker.sock\"http://localhost/v${API_VER}/containers/json?all=true"返回为 JSON 数组;有jq时可简化查看:
curl-s"http://127.0.0.1:2375/v${API_VER}/containers/json?all=true"|jq'.[] | {Id: .Id[0:12], Names, State, Status, Image}'其他常见对应(参数以官方文档为准):docker images→GET /images/json;docker info→GET /info;docker run多为创建 + 启动等组合请求。
二、端口与协议对照
| 端口 | 说明 |
|---|---|
| 2375 | Engine未加密HTTP API;勿对公网暴露。 |
| 2376 | 常见为TLSAPI(需客户端证书,与 2375 不可混用)。 |
默认安装(尤其docker.socket)通常不监听 2375,仅Unix 套接字(如/run/docker.sock)。
三、连接地址含义示例
| 配置示例 | 含义 |
|---|---|
tcp://127.0.0.1:2375 | 仅本机进程经 TCP 访问本机 Docker。 |
tcp://192.168.x.x:2375 | 从其他机器访问该宿主机 Docker(需监听 + 防火墙/安全组)。 |
unix:///var/run/docker.sock | 本机Unix socket(与/run/docker.sock常等价)。 |
应用与 Docker不在同一主机时不能使用对端的127.0.0.1,应使用Docker 宿主机可达 IP(或 VPN)。
四、如何查看当前是否已配置 TCP(2375 / 2376)
在安装 Docker 的服务器上执行。
是否已有进程监听
sudoss-tlnp|grep-E'2375|2376'# 或sudonetstat-tlnp2>/dev/null|grep-E'2375|2376'- 有 2375:已暴露未加密 HTTP API。
- 有 2376:一般为 TLS API。
- 无输出:多数仅 socket,未开 TCP。
dockerd 启动参数
psaux|grepdockerd|grep-vgrep示例:
/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock-H fd://表示由systemd 套接字激活传入监听,是否 Unix/TCP 看docker.socket。
systemd:docker.service
systemctlcatdocker关注ExecStart=是否与Requires=docker.socket等配合。
systemd:docker.socket
systemctlcatdocker.socket典型仅 Unix、无 TCP:
[Socket] ListenStream=/run/docker.sock SocketMode=0660 SocketUser=root SocketGroup=docker本机用户常需加入docker组。若无ListenStream=...:2375等项,则未通过 socket 单元开 TCP。
/etc/docker/daemon.json
sudocat/etc/docker/daemon.json若存在"hosts": [...]且含tcp://...,需与fd:/// docker.socket一并核对,避免冲突。
docker info
dockerinfo可与ss、docker.socket、daemon.json交叉验证。
五、配置「写在哪里」:小结
| 位置 | 典型作用 |
|---|---|
docker.service的ExecStart | 常见dockerd -H fd://,监听交给 systemd。 |
docker.socket(及docker.socket.d) | 声明 socket 激活监听;仅ListenStream=/run/docker.sock时无 2375。 |
daemon.json的hosts | 可声明unix://与tcp://;与fd://并存时改动面大,需按官方说明调整。 |
六、未监听 2375 时是否要显式配置?
需要。默认docker.socket + fd://下通常只有 Unix socket,在未增加 TCP 监听前DOCKER_HOST=tcp://127.0.0.1:2375不会成功。
七、推荐:用 systemd 为本机增加 2375(仅本机)
不改动daemon.json中镜像等配置,仅给docker.socket增加回环 TCP:
sudomkdir-p/etc/systemd/system/docker.socket.dsudotee/etc/systemd/system/docker.socket.d/tcp-local.conf<<'EOF' [Socket] ListenStream=127.0.0.1:2375 EOFsudosystemctl daemon-reloadsudosystemctl restart docker.socketsudosystemctl restartdocker验证:
sudoss-tlnp|grep2375curl-s--unix-socket /run/docker.sock http://localhost/_pingcurl-shttp://127.0.0.1:2375/_ping安全:127.0.0.1:2375仅本机;不要将无 TLS 的 2375 绑到公网。
八、应用在「另一台机器」上访问 Docker
- 可让 Docker 监听内网 IP(须配合防火墙仅放行可信网段),在
docker.socket.d中使用形如ListenStream=192.168.x.x:2375。 0.0.0.0:2375风险高,一般不推荐。- 云上需安全组放行;长期暴露建议TLS(2376)或SSH 隧道,而非明文 2375。
九、Windows / Docker Desktop
在Settings中开启类似Expose daemon on tcp://localhost:2375后,本机才可用tcp://127.0.0.1:2375。与 Linuxsystemd + docker.socket方式不同,以桌面版文档为准。
十、参考
| 资源 | 链接 |
|---|---|
| Docker Engine API | https://docs.docker.com/engine/api/ |
daemon、systemd、security 等请以当前安装版本的官方文档为准。
