Docker实现LDAP统一认证需完成搭服务、建目录、接应用三步闭环:使用osixia/openldap与phpldapadmin镜像组合,按企业结构设计OU目录树(如ou=users/ou=groups),并通过TLS加固、最小权限账号和定期备份保障生产安全。

用Docker实现容器化LDAP统一身份认证,核心是“搭服务 + 建目录 + 接应用”三步闭环。不依赖物理机环境,所有组件隔离运行,配置可复用、部署可脚本化。
快速拉起OpenLDAP + 管理界面
推荐使用 osixia/openldap 和 osixia/phpldapadmin 镜像组合,成熟稳定、参数清晰:
- 启动LDAP服务(含数据持久化):
docker run -d \
--name ldap \
-p 389:389 -p 636:636 \
-v ./ldap/data:/var/lib/ldap \
-v ./ldap/config:/etc/ldap/slapd.d \
-e LDAP_ORGANISATION="MyCorp" \
-e LDAP_DOMAIN="mycorp.com" \
-e LDAP_ADMIN_PASSWORD="Admin@2026" \
osixia/openldap:1.5.0 - 同步启动phpLDAPadmin管理页:
docker run -d \
--name ldap-admin \
-p 7443:443 \
--link ldap:ldap-host \
-e PHPLDAPADMIN_LDAP_HOSTS=ldap-host \
-e PHPLDAPADMIN_HTTPS=false \
osixia/phpldapadmin:0.9.0 - 访问
https://:7443,用cn=admin,dc=mycorp,dc=com+ 密码登录即可管理用户和组织单元(OU)
设计符合企业结构的目录树
别直接用默认的 dc=example,dc=com。按真实组织建模,便于后续系统集成:
- 根节点:
dc=mycorp,dc=com - 一级OU建议划分:
ou=users(存放员工账号)ou=groups(定义部门/角色组)ou=services(为GitLab、Jenkins等应用分配只读账号) - 用户DN示例:
uid=zhangsan,ou=users,dc=mycorp,dc=com
组DN示例:cn=dev-team,ou=groups,dc=mycorp,dc=com - 关键属性保持标准:用
mail作登录名,givenName/sn存姓名,memberOf或isMemberOf支持组成员关系(需启用 memberOf overlay)
对接主流应用实现统一登录
各系统只需指向同一LDAP服务地址,无需各自维护账号库:
-
GitLab:修改
gitlab.rb,启用 LDAP provider,设置:bind_dn 'cn=readonly,dc=mycorp,dc=com'(用只读账号连接)base 'ou=users,dc=mycorp,dc=com'user_filter '(mail=*@mycorp.com)' -
Redmine:在
configuration.yml的production:下配置:host: your-server-ipport: 389base_dn: ou=users,dc=mycorp,dc=comattributes: { login: 'mail', mail: 'mail' }onthefly_register: true(首次登录自动创建本地账号) -
Jenkins:插件中填入相同 base DN 和 bind DN,勾选 “Group search filter” 可按
ou=groups同步权限
生产环境必须加固的要点
非加密直连仅限测试;上线前务必补上安全层:
- 启用TLS:挂载自签名或CA签发的证书到OpenLDAP容器,开启
LDAP_TLS环境变量 - 限制访问:用
iptables或 Docker network 隔离LDAP端口,仅允许GitLab、Jenkins等可信容器访问 - 最小权限原则:应用连接一律使用专用只读账号(如
cn=readonly,dc=mycorp,dc=com),禁用 admin 直连 - 定期备份:将
./ldap/data和./ldap/config卷加入定时快照策略


















