Repolode
Tecnativa

Tecnativa/docker-socket-proxy

一个安全增强的 Docker Socket 代理,通过环境变量按 API 分区放行或拦截请求。

Star
2,850
Fork
211
未关闭 Issue
57
最近提交
2个月前

这是什么?

Docker Socket Proxy 位于服务与 Docker socket 之间,用于过滤哪些 Docker API 请求可以通过。直接把 socket 挂载进容器等同于给予宿主机 root 权限,但部分服务又需要它来监听事件或管理容器。使用该代理后,可以只开放服务真正需要的 API 部分。

代理基于 Alpine 版 HAProxy 镜像,配合一份精简的配置文件运行。每个 API 分区由一个环境变量控制:设为 1 表示放行,设为 0 表示拦截,被拦截的请求会返回 HTTP 403。EVENTS、PING、VERSION 默认放行;AUTH、SECRETS 以及通过 POST 的写操作等安全敏感部分默认关闭。

镜像不提供 TLS,设计上应只在专用的 Docker 网络内使用,不要暴露到公网。它支持通过 SOCKET_PATH 指定非标准 socket 路径(例如 balenaOS),也可以通过 LOG_LEVEL 调整日志级别。镜像同时发布在 Docker Hub 和 GitHub Container Registry。

核心功能

  • 01通过按分区设置的环境变量放行或拦截 Docker API。
  • 02被拦截的请求返回 HTTP 403。
  • 03关闭 POST 后可实现只读访问。
  • 04支持通过 SOCKET_PATH 指定自定义 socket 路径。
  • 05基于 Alpine 与 HAProxy 构建,配置简洁。
  • 06覆盖 1.27 至 1.51 等多个 Docker API 版本。

适用场景

  • 让监控或反向代理容器只读地获取容器事件。
  • 限制 CI 或自动化工具,使其无法在宿主机上执行高权限操作。
  • 只向服务发现工具开放其所需的 Docker API 分区。

快速上手

  1. 1

    运行带有 Docker 套接字访问权限的代理容器

    docker container run -d --privileged --name dockerproxy -v /var/run/docker.sock:/var/run/docker.sock -p 127.0.0.1:2375:2375 tecnativa/docker-socket-proxy
  2. 2

    将本地 Docker 客户端指向该代理

    export DOCKER_HOST=tcp://localhost:2375
  3. 3

    使用 docker version 验证连接

    docker version

使用前须知

  • 容器需要使用 --privileged 运行,README 称这是连接 Docker 套接字所必需的。
  • 镜像不支持 TLS,流量为明文 HTTP,必须限制在受控网络中使用。
  • 出于安全考虑,关键 API 部分默认禁用,需要手动显式开启。

收录于专题

标签

常见问题

docker-socket-proxy 是什么?
一个安全增强的 Docker Socket 代理,通过环境变量按 API 分区放行或拦截请求。 Docker Socket Proxy 位于服务与 Docker socket 之间,用于过滤哪些 Docker API 请求可以通过。直接把 socket 挂载进容器等同于给予宿主机 root 权限,但部分服务又需要它来监听事件或管理容器。使用该代理后,可以只开放服务真正需要的 API 部分。
docker-socket-proxy 可以免费使用吗?用的什么许可证?
docker-socket-proxy 以 Apache-2.0 许可证开源。用于商业产品前,请先确认许可证条款。
docker-socket-proxy 还在维护吗?
半年内有更新。docker-socket-proxy 最近一次提交是在 2026年8月31日。
docker-socket-proxy 适合用来做什么?
让监控或反向代理容器只读地获取容器事件。 限制 CI 或自动化工具,使其无法在宿主机上执行高权限操作。 只向服务发现工具开放其所需的 Docker API 分区。
docker-socket-proxy 怎么安装和运行?
运行带有 Docker 套接字访问权限的代理容器: docker container run -d --privileged --name dockerproxy -v /var/run/docker.sock:/var/run/docker.sock -p 127.0.0.1:2375:2375 tecnativa/docker-socket-proxy 将本地 Docker 客户端指向该代理: export DOCKER_HOST=tcp://localhost:2375 使用 docker version 验证连接: docker version
在哪里获取 docker-socket-proxy?
源代码和安装说明在 GitHub 上:https://github.com/Tecnativa/docker-socket-proxy

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目