tecnativa/docker-socket-proxyDocker 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(紧急)任何反馈(问题、疑问)请提交至问题跟踪器。

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务