CentOS7: Как запустить сервис slapd в контейнере Docker? - PullRequest
0 голосов
/ 17 июня 2019

Я хочу запустить сервер 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)

1 Ответ

0 голосов
/ 18 июня 2019

(a) вы можете использовать docker-systemctl-replace для запуска вашего "systemctl.py start slapd". Что является очевидной первой ошибкой.

(b) каждый RUN в файле dockerfile является новым контейнером, поэтому запущенный процесс из более раннего вызова все равно не сможет выжить. Вот почему ссылочный пример dockerfile объединяет его с "&&".

И да (с) Я использую контейнер openldap centos. Так что давай, попробуй еще раз.

...