mirror of
https://github.com/luzifer-docker/openldap.git
synced 2024-12-20 20:51:17 +00:00
Initial version
This commit is contained in:
commit
befe7c5b26
4 changed files with 158 additions and 0 deletions
22
Dockerfile
Normal file
22
Dockerfile
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
FROM debian:wheezy
|
||||||
|
|
||||||
|
MAINTAINER Christian Luginbühl <dinke@pimprecords.com>
|
||||||
|
|
||||||
|
ENV OPENLDAP_VERSION 2.4.31
|
||||||
|
|
||||||
|
RUN apt-get update && \
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt-get install -y \
|
||||||
|
slapd=${OPENLDAP_VERSION}* \
|
||||||
|
ldap-utils=${OPENLDAP_VERSION}* && \
|
||||||
|
apt-get clean && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
EXPOSE 389
|
||||||
|
|
||||||
|
VOLUME ["/var/lib/ldap"]
|
||||||
|
|
||||||
|
COPY entrypoint.sh /entrypoint.sh
|
||||||
|
|
||||||
|
ENTRYPOINT ["/entrypoint.sh"]
|
||||||
|
|
||||||
|
CMD ["slapd", "-d", "32768"]
|
21
LICENSE
Normal file
21
LICENSE
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2015, Christian Luginbühl
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
65
README.md
Normal file
65
README.md
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
docker-openldap
|
||||||
|
===============
|
||||||
|
|
||||||
|
A Docker image running OpenLDAP on Debian stable ("wheezy" at the moment). The
|
||||||
|
Dockerfile is inspired by the well written one from
|
||||||
|
[cnry/openldap](https://registry.hub.docker.com/u/cnry/openldap/), but as said
|
||||||
|
before, running a stable Debian and be a little less verbose, but more complete
|
||||||
|
in the configuration.
|
||||||
|
|
||||||
|
NOTE: On purpose, there is no secured channel (TLS/SSL), because I believe that
|
||||||
|
this service should never be exposed to the internet, but only be used directly
|
||||||
|
by Docker containers using the `--link` option.
|
||||||
|
|
||||||
|
Usage
|
||||||
|
-----
|
||||||
|
|
||||||
|
The most simple form would be to start the application like so (however this is
|
||||||
|
not the recommended way - see above):
|
||||||
|
|
||||||
|
docker run -d -p 389:389 -e SLAPD_PASSWORD=mysecretpassword -e SLAPD_DOMAIN=ldap.example.org dinkel/openldap
|
||||||
|
|
||||||
|
To get the full potential this image offers, one should first create a data-only
|
||||||
|
container (see "Data persistence" below), start the OpenLDAP daemon as follows:
|
||||||
|
|
||||||
|
docker run -d -name openldap --volumes-from your-data-container dinkel/openldap
|
||||||
|
|
||||||
|
An application talking to OpenLDAP should then `--link` the container:
|
||||||
|
|
||||||
|
docker run -d --link openldap:openldap image-using-openldap
|
||||||
|
|
||||||
|
The name after the colon in the `--link` section is the hostname where the
|
||||||
|
OpenLDAP daemon is listening to (the port is the default port `389`).
|
||||||
|
|
||||||
|
Configuration (environment variables)
|
||||||
|
-------------------------------------
|
||||||
|
|
||||||
|
For the first run one has to set at least two envrironment variables. The first
|
||||||
|
|
||||||
|
SLAPD_PASSWORD
|
||||||
|
|
||||||
|
sets the password for the `admin` user.
|
||||||
|
|
||||||
|
The second
|
||||||
|
|
||||||
|
SLAPD_DOMAIN
|
||||||
|
|
||||||
|
sets the DC (Domain component) parts. E.g. if one sets it to `ldap.example.org`,
|
||||||
|
the generated base DC parts would be `...,dc=ldap,dc=example,dc=org`.
|
||||||
|
|
||||||
|
There is an optinal third variable
|
||||||
|
|
||||||
|
SLAPD_ORGANIZATION (defaults to $SLAPD_DOMAIN)
|
||||||
|
|
||||||
|
that represents the human readable company name (e.g. `Example Inc.`).
|
||||||
|
|
||||||
|
After the first start of the image (and the initial configuration), these
|
||||||
|
envirnonment variables are not evaluated anymore.
|
||||||
|
|
||||||
|
Data persistence
|
||||||
|
----------------
|
||||||
|
|
||||||
|
The image exposes the directory, where the data is written
|
||||||
|
(`VOLUME ["/var/lib/ldap"`). Please make sure that
|
||||||
|
these directories are saved (in a data-only container or alike) in order to make
|
||||||
|
sure that everything is restored after a new restart of the application.
|
50
entrypoint.sh
Executable file
50
entrypoint.sh
Executable file
|
@ -0,0 +1,50 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
chown -R openldap:openldap /var/lib/ldap/
|
||||||
|
|
||||||
|
if [[ ! -f /etc/ldap/docker-configured ]]; then
|
||||||
|
if [[ -z "$SLAPD_PASSWORD" ]]; then
|
||||||
|
echo >&2 "Error: slapd not configured and SLAPD_PASSWORD not set"
|
||||||
|
echo >&2 "Did you forget to add -e SLAPD_PASSWORD=... ?"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "$SLAPD_DOMAIN" ]]; then
|
||||||
|
echo >&2 "Error: slapd not configured and SLAPD_DOMAIN not set"
|
||||||
|
echo >&2 "Did you forget to add -e SLAPD_DOMAIN=... ?"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
SLAPD_ORGANIZATION="${SLAPD_ORGANIZATION:-${SLAPD_DOMAIN}}"
|
||||||
|
|
||||||
|
cat <<-EOF | debconf-set-selections
|
||||||
|
slapd slapd/no_configuration boolean false
|
||||||
|
slapd slapd/password1 password $SLAPD_PASSWORD
|
||||||
|
slapd slapd/password2 password $SLAPD_PASSWORD
|
||||||
|
slapd shared/organization string $SLAPD_ORGANIZATION
|
||||||
|
slapd slapd/domain string $SLAPD_DOMAIN
|
||||||
|
slapd slapd/backend select hdb
|
||||||
|
slapd slapd/allow_ldap_v2 boolean false
|
||||||
|
slapd slapd/purge_database boolean false
|
||||||
|
slapd slapd/move_old_database boolean true
|
||||||
|
EOF
|
||||||
|
|
||||||
|
dpkg-reconfigure -fnoninteractive slapd >/dev/null 2>&1
|
||||||
|
|
||||||
|
dc_string=""
|
||||||
|
|
||||||
|
IFS="."; declare -a dc_parts=($SLAPD_DOMAIN)
|
||||||
|
|
||||||
|
for dc_part in "${dc_parts[@]}"; do
|
||||||
|
dc_string="$dc_string,dc=$dc_part"
|
||||||
|
done
|
||||||
|
|
||||||
|
base_string="BASE ${dc_string:1}"
|
||||||
|
|
||||||
|
sed -i "s/^#BASE.*/${base_string}/g" /etc/ldap/ldap.conf
|
||||||
|
|
||||||
|
touch /etc/ldap/docker-configured
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec "$@"
|
Loading…
Reference in a new issue