推荐用 docker_auth 搭建强认证私有镜像库,因其基于标准 Token 认证实现细粒度权限控制;它分离认证与授权,支持按仓库前缀、用户组配置 pull/push/delete 等差异化策略,远超 htpasswd 的简单密码校验能力。

用 docker_auth 搭建强认证的私有镜像库,是生产环境最推荐的做法。它不依赖基础用户名密码,而是通过标准 Token 认证流程实现细粒度权限控制,能真正支撑企业级访问策略。
为什么选 docker_auth 而不是 htpasswd
htpasswd 只做身份核验,无法区分“谁可以 pull 哪个仓库”或“谁只能 push 不能 delete”。docker_auth 则把认证和授权拆开:先由它签发短期 Token,再按 ACL 规则动态决定每次请求是否放行。比如可配置:
- 开发组只能 pull 和 push
dev/开头的镜像 - 测试组对
test/镜像只有 pull 权限 - 运维账号拥有全部仓库的 delete 权限
快速启动 docker_auth 服务
以静态用户+ACL 文件方式为例(适合中小团队):
- 准备两个配置文件:
auth_config.yml(定义用户与密码)、acl.yml(定义权限规则) - 运行命令:
docker run -d \ --name docker_auth \ -p 5001:5001 \ -v $(pwd)/auth_config.yml:/config/auth_config.yml \ -v $(pwd)/acl.yml:/config/acl.yml \ -v /var/log/docker_auth:/logs \ --restart=always \ cesanta/docker_auth:latest \ /config/auth_config.yml
其中 auth_config.yml 示例含 bcrypt 加密密码,acl.yml 中每条 rule 明确指定 match(匹配条件)、actions(允许操作)和 users(适用账户)。
让 Registry 对接 docker_auth
修改 Registry 的 config.yml,将 auth 段指向 docker_auth 地址:
auth:
token:
realm: "http://your-auth-server:5001/auth"
service: "your-registry-domain"
issuer: "your-auth-server"
rootcertbundle: /etc/registry/auth.crt
注意:realm 必须是可访问的 HTTP 或 HTTPS 地址;若 docker_auth 未启用 TLS,Registry 容器需挂载其证书或设为不校验证书(仅限内网)。
客户端使用与权限验证
用户仍执行 docker login your-registry:5000,但背后已走完整 Token 流程:
- Registry 返回 401 并带
WWW-Authenticate头,指向 docker_auth 的 token 接口 - Docker CLI 自动向该地址发起请求,传入用户名密码换取 Token
- 后续所有 pull/push 请求都携带该 Token,docker_auth 实时校验 ACL 规则
可通过 curl 直接调用 http://your-auth-server:5001/auth?service=...&scope=... 手动调试 Token 签发逻辑,确认返回状态与权限字段是否符合预期。











