Я хочу запустить сервер OpenLDAP в док-контейнере, используя CentOS7.
Мне удалось запустить контейнер с установленным openldap. Моя проблема в том, что я использую скрипт entrypoint.sh, чтобы запустить сервис slapd и добавить пользователя в свой каталог. Мне бы хотелось, чтобы эти два шага были в Dockerfile, чтобы пароль для выполнения ldapadd не сохранялся в скрипте.
Пока я нашел только примеры на Debian.
https://github.com/kanboard/docker-openldap/blob/master/memberUid/Dockerfile это то, что я хотел бы сделать, но используя CentOS 7.
Я попытался запустить сервис slapd в моем Dockerfile, но безуспешно.
Мой Dockerfile выглядит так:
FROM centos:7
RUN yum -y update && yum -y install \
openldap-servers \
openldap-clients \
libselinux-python \
openssl \
; yum clean all
RUN chown ldap:ldap -R /var/lib/ldap
COPY slapd.conf /etc/openldap/slapd.conf
COPY base.ldif /etc/openldap/schema/base.ldif
COPY entrypoint.sh /entrypoint.sh
RUN chmod 500 /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
Мой скрипт entrypoint.sh выглядит так:
#!/bin/bash
exec /usr/sbin/slapd -f /etc/openldap/slapd.conf -h "ldapi:/// ldap:///" -d stats &
sleep 10
ldapadd -x -w mypassword -D "cn=ldapadm,dc=mydomain" -f /etc/openldap/schema/base.ldif
Это работает, однако я хочу запустить службу ldap и выполнить команду ldapadd в Dockerfile, чтобы mypassword не сохранялся в entrypoint.sh.
Поэтому я попробовал эти команды:
RUN systemctl slapd start
RUN ldapadd -x -w password -D "cn=ldapadm,dc=mydomain" -f /etc/openldap/schema/base.ldif
Конечно, это не работает, так как systemctl не работает в Dockerfile. Какова лучшая альтернатива? Я думал о том, чтобы один контейнер запустил ldap servcie, но тогда я не знаю, как его вызвать, чтобы создать образ другого контейнера ...
РЕДАКТИРОВАТЬ:
Благодаря Guido U. Draheim у меня есть альтернатива systemctl для запуска службы slapd.
Мой Dockerfile теперь выглядит так:
FROM centos:7
RUN yum -y update && yum -y install \
openldap-servers \
openldap-clients \
libselinux-python \
openssl \
; yum clean all
RUN chown ldap:ldap -R /var/lib/ldap
COPY slapd.conf /etc/openldap/slapd.conf
COPY base.ldif /etc/openldap/schema/base.ldif
COPY files/docker/systemctl.py /usr/bin/systemctl
RUN systemctl enable slapd
RUN systemctl start slapd;\
ldapdd -x -w password -D "cn=ldapadm,dc=sblanche" -f /etc/openldap/schema/base.ldif
COPY entrypoint.sh /entrypoint.sh
RUN chmod 500 /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
Но я получил следующую ошибку: ldap_bind: Неверные учетные данные (49)