核心是容器隔离、配置即代码与网络互通,选用osixia/openldap:1.5.0或lldap/lldap:latest镜像,通过docker-compose定义ldap-net网络、端口映射及数据持久化,并在gitlab/nextcloud/jenkins中配置对应host、base_dn和bind_dn实现统一认证。

用 Docker 实现 LDAP 统一身份认证系统,核心是“容器隔离 + 配置即代码 + 网络互通”。不需编译、不改系统依赖,30 分钟内就能跑通基础认证链路。
选对镜像,省掉 80% 的兼容问题
优先使用生产验证过的成熟镜像:
-
OpenLDAP:用
osixia/openldap:1.5.0—— 自带 TLS 初始化、密码策略、LDIF 导入支持,环境变量直接控制 DN、管理员密码、只读账号 -
lldap:用
lldap/lldap:latest—— 轻量、自带 Web 管理界面(HTTP 端口直连)、JWT 认证友好,适合中小团队快速上手 - 管理工具配
osixia/phpldapadmin:0.9.0或直接用 lldap 内置界面,避免额外维护 Apache/PHP 环境
用 docker-compose 定义服务关系
关键不是单个容器跑起来,而是让 LDAP 服务能被其他应用稳定访问。重点配置三项:
-
自定义网络:所有服务加入同一 bridge 网络(如
ldap-net),容器名可直接当主机名用(如 GitLab 连ldap:389) -
端口映射克制:仅暴露必要端口——LDAP 默认
389(明文)或636(LDAPS),管理界面按需开7443或17170,不对外暴露配置端口 -
数据持久化明确:用命名卷(
lldap_data)或绑定挂载(./ldap/data:/var/lib/ldap),避免容器重启后用户数据丢失
让业务系统真正连上 LDAP
集成成败取决于三点是否对齐:连接地址、基础 DN、绑定凭据。常见系统配置示例:
-
GitLab:在
gitlab.rb中设gitlab_rails['ldap_enabled'] = true,指定host: 'ldap'、base: 'dc=example,dc=com'、bind_dn: 'cn=admin,dc=example,dc=com' -
NextCloud:后台 LDAP 设置里填服务器为
lldap(容器名)、端口3890、Base DNdc=example,dc=com、Admin DN 同上 -
Jenkins:安装 LDAP 插件后,在全局安全配置中填 Host
ldap、Root DNdc=example,dc=com、Manager DN 和密码
验证与调错的实用动作
别只看容器 up,要验证协议层通不通:
- 进 GitLab 容器执行:
ldapsearch -x -H ldap://ldap:389 -b "dc=example,dc=com" -D "cn=admin,dc=example,dc=com" -w "Admin@123"—— 能返回用户列表才算真通 - 浏览器打开 phpLDAPadmin 或 lldap 界面,用 admin 凭据登录,确认能查到
ou=Users下的测试用户 - 新用户首次登录某系统时,观察其日志是否出现
ldap_simple_bind_s成功记录,而非Invalid credentials或Can't contact LDAP server











