Socket Proxy Docker 镜像
11notes查看 Docker Hub 原文页
安全访问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示例:
yamlname: "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配置,例如:
shellsocket-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中添加端口映射:
yamlports: - "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_SOCKET | Docker socket实际路径 | /run/docker.sock |
SOCKET_PROXY_UID | 运行代理进程的UID | 1000 |
SOCKET_PROXY_GID | 运行代理进程的GID | 1000 |
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标签,但可能包含破坏性变更,风险自负
镜像仓库
可从以下仓库拉取镜像:
shelldocker 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
11notes 命名空间的其他可用镜像:
镜像拉取方式
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
轩辕镜像加速拉取命令点我查看更多 socket-proxy 镜像标签
docker pull docker.xuanyuan.run/11notes/socket-proxy:<标签>
DockerHub 原生拉取命令
docker pull 11notes/socket-proxy:<标签>
用户好评
来自真实用户的反馈,见证轩辕镜像的优质服务