Docker引擎API接入配置

张开发
2026/4/11 17:45:09 15 分钟阅读

分享文章

Docker引擎API接入配置
Docker引擎API接入配置全文链接Docker引擎API接入配置说明 Docker EngineHTTP API的能力与接入形态、2375 / 2376端口含义、Linuxsystemd下默认仅 Unix Socket 的行为以及如何检查与为本机开启TCP接入如DOCKER_HOSTtcp://127.0.0.1:2375。适用于需通过 HTTP 调用 Docker 的应用与运维场景细节以当前 Engine 版本及 Docker Engine API 为准。一、API 介绍接入后能做什么Docker 守护进程dockerd对外提供REST 风格的 Engine HTTP APIDocker Engine API。通过TCP或Unix 套接字上的同源协议接入后效果等价于把 Docker 变成可被 HTTP 客户端调用的服务——能力与终端docker子命令一致容器/镜像/网络等调用方式由 CLI 换为 HTTP。dockerCLI 与 APICLI 在多数场景下同样调用该 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 psGET /containers/jsonalltrue时接近docker ps -a。将${API_VER}换为/version返回值如1.47。仅运行中API_VER1.47# 按本机 /version 修改curl-shttp://127.0.0.1:2375/v${API_VER}/containers/json含已退出curl-shttp://127.0.0.1:2375/v${API_VER}/containers/json?alltrueUnix Socketcurl-s--unix-socket /run/docker.sock\http://localhost/v${API_VER}/containers/json?alltrue返回为 JSON 数组有jq时可简化查看curl-shttp://127.0.0.1:2375/v${API_VER}/containers/json?alltrue|jq.[] | {Id: .Id[0:12], Names, State, Status, Image}其他常见对应参数以官方文档为准docker images→GET /images/jsondocker info→GET /infodocker run多为创建 启动等组合请求。二、端口与协议对照端口说明2375Engine未加密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。四、如何查看当前是否已配置 TCP2375 / 2376在安装 Docker 的服务器上执行。是否已有进程监听sudoss-tlnp|grep-E2375|2376# 或sudonetstat-tlnp2/dev/null|grep-E2375|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。systemddocker.servicesystemctlcatdocker关注ExecStart是否与Requiresdocker.socket等配合。systemddocker.socketsystemctlcatdocker.socket典型仅 Unix、无 TCP[Socket] ListenStream/run/docker.sock SocketMode0660 SocketUserroot SocketGroupdocker本机用户常需加入docker组。若无ListenStream...:2375等项则未通过 socket 单元开 TCP。/etc/docker/daemon.jsonsudocat/etc/docker/daemon.json若存在hosts: [...]且含tcp://...需与fd:/// docker.socket一并核对避免冲突。docker infodockerinfo可与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_HOSTtcp://127.0.0.1:2375不会成功。七、推荐用 systemd 为本机增加 2375仅本机不改动daemon.json中镜像等配置仅给docker.socket增加回环 TCPsudomkdir-p/etc/systemd/system/docker.socket.dsudotee/etc/systemd/system/docker.socket.d/tcp-local.confEOF [Socket] ListenStream127.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中使用形如ListenStream192.168.x.x:2375。0.0.0.0:2375风险高一般不推荐。云上需安全组放行长期暴露建议TLS2376或SSH 隧道而非明文 2375。九、Windows / Docker Desktop在Settings中开启类似Expose daemon on tcp://localhost:2375后本机才可用tcp://127.0.0.1:2375。与 Linuxsystemd docker.socket方式不同以桌面版文档为准。十、参考资源链接Docker Engine APIhttps://docs.docker.com/engine/api/daemon、systemd、security 等请以当前安装版本的官方文档为准。

更多文章