socket-proxy

Socket Proxy Docker 镜像

安全访问Docker socket的代理镜像,提供只读权限、非root用户(1000:1000)运行及无发行版(distroless)特性,增强容器环境安全性。

下载次数: 0状态:社区镜像维护者:11notes仓库类型:镜像最近更新:
下载命令
点击查看

SOCKET-PROXY

镜像概述和主要用途

SOCKET-PROXY是一个安全访问Docker socket的代理镜像,旨在通过只读权限、非root用户运行及无发行版(distroless)设计,增强容器环境中Docker socket的访问安全性。该镜像将Docker socket代理为只读模式,暴露的代理socket以1000:1000用户组运行,同时可选启动TCP端点(2375端口)用于代理访问。适用于需要限制Docker socket访问权限的场景,如反向代理、容器管理工具等,可有效降低直接暴露Docker socket带来的安全风险。

核心功能和特性

  • 非root运行:代理进程以1000:1000用户组运行,避免root权限暴露
  • 无发行版设计:基于distroless,不含shell,减少***面
  • 只读权限:容器以只读模式运行,增强文件系统安全性
  • 自动更新:通过CI/CD自动更新至最新版本
  • 健康检查:内置健康检查机制,确保服务可用性
  • CVE扫描:发布前后自动扫描漏洞,保障镜像安全性
  • 精简体积:基于scratch构建,镜像体积极小
  • 安全CI/CD:通过安全固定的CI/CD流程构建,确保镜像完整性

使用场景和适用范围

  • 反向代理集成:与Traefik、Nginx等反向代理配合,安全获取Docker容器信息
  • 容器管理工具:为需要访问Docker socket的管理工具提供受限访问通道
  • 多容器环境:在微服务架构中,限制不同服务对Docker socket的访问权限
  • 安全敏感场景:适用于对容器安全性要求较高的生产环境,降低权限滥用风险

使用方法和配置说明

Docker Compose示例

以下是与Traefik配合使用的docker-compose示例:

yaml
name: "reverse-proxy"
services:
  socket-proxy:
    # 用于将Docker socket以只读方式暴露给Traefik
    # 详情参见https://github.com/11notes/docker-socket-proxy
    image: "docker.xuanyuan.run/11notes/socket-proxy:2.1.6"
    read_only: true  # 只读模式运行
    user: "0:0"      # 根据实际Docker socket权限调整UID/GID,错误时容器会提示正确值
    environment:
      TZ: "Europe/Zurich"  # 设置时区
    volumes:
      - "/run/docker.sock:/run/docker.sock:ro"  # 挂载Docker socket(只读)
      - "socket-proxy.run:/run/proxy"           # 代理socket存储卷
    restart: "always"

  traefik:
    depends_on:
      socket-proxy:
        condition: "service_healthy"  # 依赖socket-proxy健康状态
        restart: true
    image: "docker.xuanyuan.run/11notes/traefik:3.5.0"
    read_only: true
    # 省略Traefik其他配置...
    volumes:
      - "socket-proxy.run:/var/run"  # 挂载代理socket
    # 省略其他配置...

volumes:
  socket-proxy.run:  # 代理socket存储卷

networks:
  # 省略网络配置...

UID/GID设置说明

若Docker socket权限与容器用户不匹配,容器会输出错误提示并建议正确的UID/GID配置,例如:

shell
socket-proxy-1  | 2025/03/26 10:16:33 can’t access docker socket as GID 0 owned by GID 991
socket-proxy-1  | please change the user setting in your compose to the correct UID/GID pair like this:
socket-proxy-1  | services:
socket-proxy-1  |   socket-proxy:
socket-proxy-1  |     user: "0:991"

需根据提示调整user字段。

TCP端点配置

默认不暴露TCP端点,如需启用,需在compose中添加端口映射:

yaml
ports:
  - "2375:2375/tcp"  # 暴露TCP代理端点

禁止访问的API端点

即使通过GET请求,以下Docker API端点仍被阻止访问,增强安全性:

  • GET /containers/{id}/attach/ws
  • GET /containers/{id}/export
  • GET /containers/{id}/archive
  • GET /secrets
  • GET /configs
  • GET /swarm/unlockkey
  • GET /images/{name}/get

环境变量配置

参数说明默认值
TZ时区(参考tz数据库列表)无
DEBUG启用调试模式(容器和应用)无
SOCKET_PROXY_VOLUME代理socket存储卷路径/run/proxy
SOCKET_PROXY_DOCKER_SOCKETDocker socket实际路径/run/docker.sock
SOCKET_PROXY_UID运行代理进程的UID1000
SOCKET_PROXY_GID运行代理进程的GID1000
SOCKET_PROXY_KEEPALIVE与Docker socket的连接保活间隔10s
SOCKET_PROXY_TIMEOUT与Docker socket的连接超时时间30s

镜像标签说明

主要标签

  • https://hub.docker.com/r/11notes/socket-proxy/tags?name=2.1.6:稳定版本标签

关于标签的说明

  • 无latest标签:避免因突发版本变更导致的兼容性问题。建议使用语义化版本标签,如:2(固定主版本)、:2.1(固定次版本)
  • 滚动更新标签:如需最新版本,可使用:rolling标签,但可能包含破坏性变更,风险自负

镜像仓库

可从以下仓库拉取镜像:

shell
docker pull docker.xuanyuan.run/11notes/socket-proxy:2.1.6
docker pull ***-ghcr.xuanyuan.run/11notes/socket-proxy:2.1.6
docker pull ***-quay.xuanyuan.run/11notes/socket-proxy:2.1.6

源码与父镜像

  • 源码地址:https://github.com/11notes/docker-SOCKET-PROXY
  • 父镜像:基于https://hub.docker.com/_/scratch构建,包含https://github.com/11notes/docker-distroless/blob/master/arch.dockerfile层(提供用户、时区及根证书)

使用建议

  • 配合反向代理(如Traefik、Nginx)使用,终止TLS并保护端点
  • 使用Let’s Encrypt DNS-01挑战获取SSL证书,增强传输安全性
  • 定期更新镜像标签至最新稳定版本,确保安全补丁已应用
  • 根据Docker socket实际权限调整user配置,容器启动错误时会提示正确UID/GID

镜像拉取方式

您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。

轩辕镜像加速拉取命令点我查看更多 socket-proxy 镜像标签

docker pull docker.xuanyuan.run/11notes/socket-proxy:<标签>

DockerHub 原生拉取命令

docker pull 11notes/socket-proxy:<标签>
专业版 · 高速稳定拉取镜像
50GB 仅 ¥8/年
高速镜像下载在线技术支持专业版保障服务可用付费会员免广告