对接ldap的核心是用docker_auth作独立认证代理,它验证账号、查ldap、签发token,registry仅校验token;需先部署osixia/openldap或lldap镜像并测试连通性,再配置auth_config.yml的ldap参数与token.issuer,registry的config.yml中realm、service、issuer须严格匹配,acl按用户名或正则控制权限。

对接 LDAP 的核心不是直接改 Registry,而是用 docker_auth 做独立认证代理——它验证账号密码、查 LDAP、签发 Token,Registry 只负责校验这个 Token。
准备 LDAP 服务
先确保 LDAP 已稳定运行,推荐用 osixia/openldap:1.5.0 或 lldap/lldap:latest 镜像启动:
- 容器名建议设为
ldap,方便其他服务通过名字直连(如ldap:389) - 确认基础 DN(如
dc=mycorp,dc=com)、管理员 DN(如cn=admin,dc=mycorp,dc=com)和密码已明确 - 测试通路:在 Registry 容器里执行
ldapsearch -x -H ldap://ldap:389 -b "dc=mycorp,dc=com" -D "cn=admin,dc=mycorp,dc=com" -w "xxx",能返回用户列表才算就绪
部署 docker_auth 并配置 LDAP
新建 auth_config.yml,关键项如下:
-
ldap_auth.addr: ldap:389—— 指向你的 LDAP 容器地址 -
bind_dn: cn=admin,dc=mycorp,dc=com和bind_password_file: /etc/docker_auth/ldap.pass—— 提供查询权限的账号 -
base: ou=users,dc=mycorp,dc=com和filter: (&(uid=${account})(objectClass=inetOrgPerson))—— 确保uid是你 LDAP 中实际用作登录名的属性 -
token.issuer: registry-auth—— 后续 Registry 必须严格匹配该值
配置 Registry 使用 Token 认证
修改 Registry 的 config.yml,重点在 auth 段:
-
realm: https://registry.mycompany.com/auth—— 必须是 HTTPS 地址,且路径与 docker_auth 的监听路径一致 -
service: registry.mycompany.com—— 任意标识,但需与 docker_auth 中server.address对应 -
issuer: registry-auth—— 必须与 docker_auth 的token.issuer完全相同 - 确保 Registry 容器与 docker_auth 在同一 Docker 网络,能通过容器名通信(如
docker_auth:5001)
设置 ACL 控制镜像操作权限
在 auth_config.yml 的 acl 列表中定义谁可以做什么:
- 按用户名放行:
- match: {account: "zhangsan"} actions: ["pull", "push"] - 按前缀匹配开发组:
- match: {account: /^dev-.*/} actions: ["pull", "push"] - 默认允许已认证用户拉取:
- match: {account: /.+/} actions: ["pull"],再叠加更细规则 - 注意:docker_auth 不自动解析 LDAP 组,若需组控,得提前在 filter 中嵌入组条件,或用外部脚本同步组成员到用户属性











