Docker Socket Proxy是一个安全增强的Docker套接字代理。
授予Docker套接字访问权限可能意味着授予主机甚至整个 swarm 的root权限,但某些服务需要挂钩到该套接字以响应事件等。使用此代理可以阻止您认为这些服务不应执行的任何操作,从而提高安全性。
基于官方Alpine的HAProxy镜像,通过小型配置文件实现。根据设置的环境变量阻止对Docker套接字API的访问,对危险请求返回HTTP 403 禁止访问状态码。
需使用--privileged(特权模式)标志,因为它连接到Docker套接字,在某些SELinux/AppArmor上下文中这是特权连接,否则可能被锁定:
sh$ 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
sh$ export DOCKER_HOST=tcp://localhost
VERSION API):sh$ docker version Client: Version: 17.03.1-ce API version: 1.27 Go version: go1.7.5 Git commit: c6d412e Built: Mon Mar 27 17:14:43 2017 OS/Arch: linux/amd64 Server: Version: 17.03.1-ce API version: 1.27 (minimum version 1.12) Go version: go1.7.5 Git commit: c6d412e Built: Mon Mar 27 17:14:43 2017 OS/Arch: linux/amd64 Experimental: false
CONTAINERS API):sh$ docker container ls Error response from daemon: <html><body><h1>403 Forbidden</h1> Request forbidden by administrative rules. </body></html>
任何使用此代理2375端口访问Docker套接字API的容器都会受到相同的访问控制。
通过环境变量授予或撤销Docker API特定section的访问权限。变量通常与URL前缀匹配(例如AUTH控制对/auth/* API部分的访问)。
环境变量取值:
0:撤销访问权限1:授予访问权限以下API section通常无害且几乎是任何使用API的服务所必需的,因此默认允许访问:
EVENTS(事件)PING(心跳检测)VERSION(版本信息)安全关键型
以下API section被视为安全关键型,默认禁止访问。启用时需极度谨慎:
AUTH(认证):涉及Docker认证操作SECRETS(密钥):Docker密钥管理POST:禁用时仅允许GET和HEAD操作,即API所有section均为只读非必需型
以下API section并非总是需要,可能会暴露服务不需要的信息,根据需求决定是否启用:
BUILD(构建):镜像构建相关操作COMMIT(提交):容器提交为镜像CONFIGS(配置):Docker配置管理CONTAINERS(容器):容器生命周期管理(创建、启动、停止、删除等)DISTRIBUTION(分发):镜像分发相关EXEC(执行):在容器内执行命令IMAGES(镜像):镜像管理INFO(信息):Docker系统信息NETWORKS(网络):网络管理NODES(节点):Swarm节点管理PLUGINS(插件):Docker插件管理SERVICES(服务):Swarm服务管理SESSION(会话):会话管理SWARM(集群):Swarm集群管理SYSTEM(系统):系统相关操作TASKS(任务):Swarm任务管理VOLUMES(卷):数据卷管理除Docker外,开发所需的所有依赖均通过poetry管理。
shpoetry install # 安装依赖
本地运行测试时,添加--prebuild自动构建镜像:
shpoetry run pytest --prebuild
默认情况下,测试使用(并可选预构建)名为docker-socket-proxy:local的镜像。也可单独构建镜像后移除--prebuild标志:
shdocker image build -t docker-socket-proxy:local . # 单独构建 poetry run pytest # 运行测试
如需使用自定义镜像,设置DOCKER_IMAGE_NAME环境变量:
sh# 自动构建自定义镜像 env DOCKER_IMAGE_NAME=my_custom_image poetry run pytest --prebuild # 单独构建自定义镜像后测试 docker image build -t my_custom_image . env DOCKER_IMAGE_NAME=my_custom_image poetry run pytest
通过环境变量LOG_LEVEL设置日志级别,默认值为info。可选值(按严重程度递增):
debug(调试)info(信息)notice(通知)warning(警告)err(错误)crit(严重)alert(警报)emerg(紧急)任何反馈(问题、疑问)请提交至https://github.com/Tecnativa/docker-socket-proxy/issues。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务