OpenLDAP container image with built-in bootstrap, backup, TLS, replication and upgrades 🐳🪪🌴
100M+
⚠️ ⚠️ ⚠️ The stable tag will be removed in the coming weeks, please use the 1.5.0 tag instead.
OpenLDAP container image with built-in bootstrap, backup helpers, TLS, replication and upgrade support.
⚠️ WARNING v2 is a breaking release. Existing v1 deployments are not migrated automatically and require a manual migration to move to v2. Automatic upgrade paths are intended only between future v2 versions (for example, v2.x to v2.y).
110M+ pulls 🎉 Thanks to everyone using, testing, reporting issues, and contributing to this image. 🙏

Run a basic OpenLDAP server:
docker run --name openldap --hostname ldap.example.org -p 389:3890 -p 636:6360 \
-e OPENLDAP_BOOTSTRAP_ORGANIZATION="Keycloakers Org" \
-e OPENLDAP_BOOTSTRAP_SUFFIX="dc=keycloakers,dc=org" \
osixia/openldap
For persistent deployments, mount config, data, and backup directories:
docker run --name openldap --hostname ldap.example.org -p 389:3890 -p 636:6360 \
-e OPENLDAP_BOOTSTRAP_ORGANIZATION="Keycloakers Org" \
-e OPENLDAP_BOOTSTRAP_SUFFIX="dc=keycloakers,dc=org" \
-v openldap-conf:/etc/openldap/slapd.d \
-v openldap-data:/var/lib/openldap/openldap-data \
-v openldap-backups:/var/lib/openldap/openldap-backups \
osixia/openldap
Notes:
3890 (LDAP) and 6360 (LDAPS), as defined by OPENLDAP_URLS.OPENLDAP_BOOTSTRAP_SUFFIX must start with dc= (for example dc=example,dc=org).The image includes the openldap-ctl helper with backup and restore commands.
Create a full backup:
docker exec openldap container run -- openldap-ctl backup my-backup
Create only a data backup and remove backups older than 15 days whose name starts with my-:
docker exec openldap container run -- openldap-ctl backup my-backup --data --clean 15 --clean-prefix my-
Without --clean-prefix, --clean removes all old backups in OPENLDAP_BACKUP_DIR. Other files are never removed.
This creates files in OPENLDAP_BACKUP_DIR:
my-backup-config.gzmy-backup-data.gzRestore a backup:
docker exec openldap container run -- openldap-ctl restore my-backup --force
--force stops the OpenLDAP process if needed, replaces existing data in the target directories with the selected databases, then starts OpenLDAP again. Backup files are checked first: if one is missing or corrupted, nothing is stopped or deleted. If the restore fails, the previous data is put back.
The cron service is disabled by default. To schedule regular backups, run it in a separate container alongside OpenLDAP, sharing its configuration, data, and backup volumes:
docker run --name openldap-cron \
-u root \
-v openldap-conf:/etc/openldap/slapd.d \
-v openldap-data:/var/lib/openldap/openldap-data \
-v openldap-backups:/var/lib/openldap/openldap-backups \
osixia/openldap -x openldap-cron
See the OPENLDAP_CRON_JOB environment variable to adjust the cron schedule and behavior.
Set OPENLDAP_BOOTSTRAP_TLS=true to configure TLS during bootstrap.
The default certificate paths are:
/container/services/openldap/assets/certs/tls.crt/container/services/openldap/assets/certs/tls.key/container/services/openldap/assets/certs/ca.crtThe simplest way is to mount a directory that contains files with exactly those names:
docker run --name openldap --hostname ldap.example.org -p 389:3890 -p 636:6360 \
-e OPENLDAP_BOOTSTRAP_TLS=true \
-v $PWD/certs:/container/services/openldap/assets/certs \
osixia/openldap
If you also set OPENLDAP_BOOTSTRAP_TLS_REQUIRED=true, bootstrap adds TLS-required access rules. That setting is stricter than plain TLS enablement and is intended for deployments where non-TLS client access should be rejected.
Core
| Variable | Description | Default |
|---|---|---|
OPENLDAP_CONF_DIR | OpenLDAP configuration directory (slapd.d) | /etc/openldap/slapd.d |
OPENLDAP_DATA_DIR | OpenLDAP data directory | /var/lib/openldap/openldap-data |
OPENLDAP_BACKUP_DIR | Backup directory used by openldap-ctl backup | /var/lib/openldap/openldap-backups |
OPENLDAP_MODULES_DIR | Directory used by OpenLDAP dynamic modules | /usr/lib/openldap |
OPENLDAP_SCHEMAS_DIR | Directory containing LDIF schemas loaded at bootstrap | /etc/openldap/schema |
OPENLDAP_CUSTOM_MODULES_DIR | Custom modules copied at startup | /container/services/openldap/assets/module |
OPENLDAP_CUSTOM_SCHEMAS_DIR | Custom schemas copied at startup | /container/services/openldap/assets/schema |
OPENLDAP_NOFILE | ulimit -n value before starting slapd | 8192 |
OPENLDAP_DEBUG_LEVEL | Default slapd debug level | 256 |
OPENLDAP_URLS | Listener URLs passed to slapd -h | ldap://:3890 ldaps://:6360 ldapi:/// |
Bootstrap
| Variable | Description | Default |
|---|---|---|
OPENLDAP_BOOTSTRAP_ORGANIZATION | Organization name used in bootstrap data | Example Org |
OPENLDAP_BOOTSTRAP_SUFFIX | Base LDAP suffix; must start with dc= | dc=example,dc=org |
OPENLDAP_BOOTSTRAP_MODULES | auto: base and enabled feature modules; an explicit list sets the exact modules and order | auto |
OPENLDAP_BOOTSTRAP_SCHEMAS | LDIF schemas imported during bootstrap | core.ldif cosine.ldif inetorgperson.ldif rfc2307bis.ldif |
OPENLDAP_BOOTSTRAP_GLOBAL_SIZE_LIMIT | Global LDAP size limit | 500 |
OPENLDAP_BOOTSTRAP_GLOBAL_TIME_LIMIT | Global LDAP time limit | 120 |
OPENLDAP_BOOTSTRAP_GLOBAL_IDLE_TIMEOUT | Global LDAP idle timeout | 3600 |
OPENLDAP_BOOTSTRAP_GLOBAL_WRITE_TIMEOUT | Timeout for blocked network writes, in seconds (0: disabled) | 0 |
OPENLDAP_BOOTSTRAP_GLOBAL_CONN_MAX_PENDING | Maximum pending requests per anonymous connection | 100 |
OPENLDAP_BOOTSTRAP_GLOBAL_CONN_MAX_PENDING_AUTH | Maximum pending requests per authenticated connection | 1000 |
OPENLDAP_BOOTSTRAP_GLOBAL_SOCKBUF_MAX_INCOMING | Maximum incoming LDAP message size for anonymous connections, in bytes | 262143 |
OPENLDAP_BOOTSTRAP_GLOBAL_SOCKBUF_MAX_INCOMING_AUTH | Maximum incoming LDAP message size for authenticated connections, in bytes | 4194303 |
OPENLDAP_BOOTSTRAP_FRONTEND_PASSWORD_HASH | Password hash scheme configured in olcPasswordHash | {ARGON2} |
OPENLDAP_BOOTSTRAP_CONFIG_ROOT_DN | Root DN for cn=config | cn=admin,cn=config |
OPENLDAP_BOOTSTRAP_CONFIG_ROOT_PASSWORD_HASHED | Hashed password for cn=config; generated if empty | `` |
OPENLDAP_BOOTSTRAP_DATA_DATABASE_MAX_SIZE | MDB max size for main database | 10737418240 |
OPENLDAP_BOOTSTRAP_DATA_LAST_BIND | Track successful LDAP authentications in pwdLastSuccess | false |
OPENLDAP_BOOTSTRAP_DATA_LAST_BIND_PRECISION | Minimum interval between pwdLastSuccess updates, in seconds | 3600 |
OPENLDAP_BOOTSTRAP_DATA_ROOT_DN | Root DN for main database | cn=admin,${OPENLDAP_BOOTSTRAP_SUFFIX} |
OPENLDAP_BOOTSTRAP_DATA_ROOT_PASSWORD_HASHED | Hashed password for main database root DN; generated if empty | `` |
OPENLDAP_BOOTSTRAP_DATA_TREE | Create the users, groups and services OUs | false |
OPENLDAP_BOOTSTRAP_DATA_TREE_USERS_DN | Users OU DN | ou=users,${OPENLDAP_BOOTSTRAP_SUFFIX} |
OPENLDAP_BOOTSTRAP_DATA_TREE_GROUPS_DN | Groups OU DN | ou=groups,${OPENLDAP_BOOTSTRAP_SUFFIX} |
OPENLDAP_BOOTSTRAP_DATA_TREE_SERVICES_DN | Services OU DN | ou=services,${OPENLDAP_BOOTSTRAP_SUFFIX} |
OPENLDAP_BOOTSTRAP_DATA_ADMIN | Create an account to administer users and groups | false |
OPENLDAP_BOOTSTRAP_DATA_ADMIN_DN | Scoped administrator DN | cn=admin,${OPENLDAP_BOOTSTRAP_DATA_TREE_SERVICES_DN} |
OPENLDAP_BOOTSTRAP_DATA_ADMIN_PASSWORD_HASHED | Hashed administrator password; generated if empty when enabled | `` |
OPENLDAP_BOOTSTRAP_DATA_MANAGEMENT | Enable user/group reads and user password resets | false |
OPENLDAP_BOOTSTRAP_DATA_MANAGEMENT_DN | Management account DN | cn=management,${OPENLDAP_BOOTSTRAP_DATA_TREE_SERVICES_DN} |
OPENLDAP_BOOTSTRAP_DATA_MANAGEMENT_PASSWORD_HASHED | Hashed management password; generated if empty when enabled | `` |
OPENLDAP_BOOTSTRAP_DATA_MANAGEMENT_HIDDEN_ATTRIBUTES | Comma-separated attributes hidden from the management account | userPassword,shadowLastChange |
OPENLDAP_BOOTSTRAP_DATA_MANAGEMENT_HIDDEN_PPOLICY_ATTRIBUTES | Additional hidden attributes when ppolicy is enabled | pwdHistory |
OPENLDAP_BOOTSTRAP_DATA_READONLY | Enable read-only data account creation | false |
OPENLDAP_BOOTSTRAP_DATA_READONLY_DN | DN of the read-only data account | cn=readonly,${OPENLDAP_BOOTSTRAP_SUFFIX} |
OPENLDAP_BOOTSTRAP_DATA_READONLY_PASSWORD_HASHED | Hashed password of the read-only data account; generated if empty when enabled | `` |
OPENLDAP_BOOTSTRAP_MONITOR | Enable monitor backend | false |
OPENLDAP_BOOTSTRAP_MONITOR_READONLY | Enable read-only monitor account creation | false |
OPENLDAP_BOOTSTRAP_MONITOR_READONLY_DN | DN of the read-only monitor account | cn=readonly-monitor,${OPENLDAP_BOOTSTRAP_SUFFIX} |
OPENLDAP_BOOTSTRAP_MONITOR_READONLY_PASSWORD_HASHED | Hashed password of the read-only monitor account; generated if empty when enabled | `` |
OPENLDAP_BOOTSTRAP_AUDITLOG | Log successful LDAP writes | false |
OPENLDAP_BOOTSTRAP_AUDITLOG_FILE | Audit LDIF file; requires a writable parent directory | /var/log/openldap/audit.ldif |
OPENLDAP_BOOTSTRAP_LDIF_CONFIG_DIR | Source directory for config LDIF bootstrap files | /container/services/openldap-bootstrap/assets/ldif/config |
OPENLDAP_BOOTSTRAP_LDIF_DATA_DIR | Source directory for data LDIF bootstrap files | /container/services/openldap-bootstrap/assets/ldif/data |
OPENLDAP_BOOTSTRAP_SCRIPTS_DIR | Source directory for bootstrap scripts | /container/services/openldap-bootstrap/assets/scripts |
TLS
| Variable | Description | Default |
|---|---|---|
OPENLDAP_BOOTSTRAP_TLS | Enable TLS configuration during bootstrap | false |
OPENLDAP_BOOTSTRAP_TLS_CERT | Server certificate path | /container/services/openldap/assets/certs/tls.crt |
OPENLDAP_BOOTSTRAP_TLS_CERT_KEY | Server private key path | /container/services/openldap/assets/certs/tls.key |
OPENLDAP_BOOTSTRAP_TLS_CA_CERT | CA certificate path | /container/services/openldap/assets/certs/ca.crt |
OPENLDAP_BOOTSTRAP_TLS_VERIFY_CLIENT | Value for olcTLSVerifyClient | allow |
OPENLDAP_BOOTSTRAP_TLS_PROTOCOL_MIN | Value for olcTLSProtocolMin | 3.4 |
OPENLDAP_BOOTSTRAP_TLS_REQUIRED | Enforce TLS-only access rules during bootstrap | false |
RefInt
| Variable | Description | Default |
|---|---|---|
OPENLDAP_BOOTSTRAP_REFINT | Enable the refint overlay during bootstrap | false |
OPENLDAP_BOOTSTRAP_REFINT_ATTRIBUTES | Attributes maintained by the refint overlay | member uniqueMember manager owner |
OPENLDAP_BOOTSTRAP_REFINT_NOTHING_DN | Replacement DN for empty groups; automatically creates a passwordless role when set | `` |
PPolicy
| Variable | Description | Default |
|---|---|---|
OPENLDAP_BOOTSTRAP_PPOLICY | Enable the password policy overlay during bootstrap | false |
OPENLDAP_BOOTSTRAP_PPOLICY_HASH_CLEAR_TEXT | Value for olcPPolicyHashCleartext | true |
OPENLDAP_BOOTSTRAP_PPOLICY_USE_LOCKOUT | Value for olcPPolicyUseLockout | true |
OPENLDAP_BOOTSTRAP_PPOLICY_CHECK_MODULE | Optional value for olcPPolicyCheckModule | `` |
OPENLDAP_BOOTSTRAP_PPOLICY_GROUP_DN | DN of the policy container created in the main database | ou=policies,${OPENLDAP_BOOTSTRAP_SUFFIX} |
OPENLDAP_BOOTSTRAP_PPOLICY_DEFAULT_POLICY_DN | DN of the default password policy | cn=default,${OPENLDAP_BOOTSTRAP_PPOLICY_GROUP_DN} |
OPENLDAP_BOOTSTRAP_PPOLICY_DEFAULT_MIN_LENGTH | Value for pwdMinLength | 12 |
OPENLDAP_BOOTSTRAP_PPOLICY_DEFAULT_CHECK_QUALITY | Value for pwdCheckQuality | 1 |
OPENLDAP_BOOTSTRAP_PPOLICY_DEFAULT_IN_HISTORY | Value for pwdInHistory | 12 |
OPENLDAP_BOOTSTRAP_PPOLICY_DEFAULT_ALLOW_USER_CHANGE | Value for pwdAllowUserChange | true |
OPENLDAP_BOOTSTRAP_PPOLICY_DEFAULT_SAFE_MODIFY | Value for pwdSafeModify | true |
OPENLDAP_BOOTSTRAP_PPOLICY_DEFAULT_MUST_CHANGE | Value for pwdMustChange | false |
OPENLDAP_BOOTSTRAP_PPOLICY_DEFAULT_MIN_AGE | Value for pwdMinAge | 0 |
OPENLDAP_BOOTSTRAP_PPOLICY_DEFAULT_MAX_FAILURE | Value for pwdMaxFailure | 5 |
OPENLDAP_BOOTSTRAP_PPOLICY_DEFAULT_FAILURE_COUNT_INTERVAL | Value for pwdFailureCountInterval | 300 |
OPENLDAP_BOOTSTRAP_PPOLICY_DEFAULT_LOCKOUT | Value for pwdLockout | true |
OPENLDAP_BOOTSTRAP_PPOLICY_DEFAULT_LOCKOUT_DURATION | Value for pwdLockoutDuration | 900 |
OPENLDAP_BOOTSTRAP_PPOLICY_DEFAULT_MIN_DELAY | Initial per-account lockout after a failed bind, in seconds (0: disabled) | 0 |
OPENLDAP_BOOTSTRAP_PPOLICY_DEFAULT_MAX_DELAY | Maximum progressive lockout in seconds; requires 0 < MIN_DELAY <= MAX_DELAY and policy lockout enabled | 0 |
OPENLDAP_BOOTSTRAP_PPOLICY_DEFAULT_MAX_AGE | Value for pwdMaxAge | 7776000 |
OPENLDAP_BOOTSTRAP_PPOLICY_DEFAULT_MAX_IDLE | Maximum inactivity in seconds (0: disabled); requires last bind tracking and policy lockout | 0 |
OPENLDAP_BOOTSTRAP_PPOLICY_DEFAULT_EXPIRE_WARNING | Value for pwdExpireWarning | 1209600 |
OPENLDAP_BOOTSTRAP_PPOLICY_DEFAULT_GRACE_AUTH_NLIMIT | Value for pwdGraceAuthNLimit | 3 |
Unique
| Variable | Description | Default |
|---|---|---|
OPENLDAP_BOOTSTRAP_UNIQUE | Enable the unique overlay during bootstrap | false |
OPENLDAP_BOOTSTRAP_UNIQUE_URIS | URIs enforced by the unique overlay | ldap:///?uid?sub ldap:///?mail?sub |
MemberOf
| Variable | Description | Default |
|---|---|---|
OPENLDAP_BOOTSTRAP_MEMBEROF | Enable the memberof overlay during bootstrap | false |
OPENLDAP_BOOTSTRAP_MEMBEROF_GROUP_OC | ObjectClass treated as a group by memberof | groupOfNames |
OPENLDAP_BOOTSTRAP_MEMBEROF_MEMBER_AD | Group membership attribute watched by memberof | member |
OPENLDAP_BOOTSTRAP_MEMBEROF_MEMBEROF_AD | Reverse membership attribute maintained by memberof | memberOf |
OPENLDAP_BOOTSTRAP_MEMBEROF_ADD_CHECK | Check new entries against existing groups on Add | true |
OPENLDAP_BOOTSTRAP_MEMBEROF_DANGLING | Handling of group members that do not exist yet | ignore |
Replication
| Variable | Description | Default |
|---|---|---|
OPENLDAP_BOOTSTRAP_REPLICATION | Enable replication bootstrap | false |
OPENLDAP_BOOTSTRAP_REPLICATION_HOSTS | Replication endpoints list; two to nine, same order on every server | ldap://ldap1.example.org:3890 ldap://ldap2.example.org:3890 |
OPENLDAP_BOOTSTRAP_REPLICATION_SYNCPROV_CHECKPOINT | syncprov checkpoint configuration | 100 10 |
OPENLDAP_BOOTSTRAP_REPLICATION_DATA_READONLY_DN | Replication account DN for the main database | cn=replicator,${OPENLDAP_BOOTSTRAP_SUFFIX} |
OPENLDAP_BOOTSTRAP_REPLICATION_DATA_READONLY_PASSWORD | Plain password for the data replication account, without "; generated if empty | `` |
OPENLDAP_BOOTSTRAP_REPLICATION_DATA_SYNC_REPL_TEMPLATE | Template used to generate data olcSyncRepl | rid=\${OPENLDAP_BOOTSTRAP_REPLICATION_DATA_SYNC_REPL_RID} ... |
OPENLDAP_BOOTSTRAP_REPLICATION_DATA_LIMITS | Limits ACL for the data replication account | dn.exact="${OPENLDAP_BOOTSTRAP_REPLICATION_DATA_READONLY_DN}" ... |
OPENLDAP_BOOTSTRAP_REPLICATION_TLS | Enable TLS settings in generated replication config | ${OPENLDAP_BOOTSTRAP_TLS_REQUIRED} |
OPENLDAP_BOOTSTRAP_REPLICATION_TLS_SYNC_REPL | Extra syncrepl TLS options | starttls=critical tls_reqcert=demand |
OPENLDAP_BOOTSTRAP_REPLICATION_MEMBEROF | Enable memberof settings in generated replication config | ${OPENLDAP_BOOTSTRAP_MEMBEROF} |
OPENLDAP_BOOTSTRAP_REPLICATION_MEMBEROF_SYNC_REPL | Extra syncrepl option used when memberof replication handling is enabled | exattrs=${OPENLDAP_BOOTSTRAP_MEMBEROF_MEMBEROF_AD} |
See full documentation and complete features list on osixia/openldap documentation.
This image is based on osixia/baseimage.
Browse source code and contribute to this project on GitHub.
Content type
Image
Digest
sha256:3f6875129…
Size
87.4 MB
Last updated
over 5 years ago
docker pull osixia/openldap