Не удается подключиться к серверу LDAP, если файл конфигурации заменен на пользовательский - PullRequest
0 голосов
/ 28 апреля 2020

Мы пытаемся установить сервер ldap в Docker с использованием Apache DS с заменой схемы по умолчанию. Для этого мы используем следующий Dockerfile:

FROM openjdk:8u212-jdk-alpine3.9
HEALTHCHECK --retries=99 \
            --timeout=5s \
            --interval=5s \
            --start-period=10s \
            CMD cat /tmp/health/ready || exit 1
USER root
RUN apk add --no-cache --upgrade openldap-clients bash \
 && mkdir -p /opt/apacheds \
 && adduser -S -D -s /bin/ash -h /opt/apacheds -G wheel -u 1001 apacheds \
 && chown -Rc apacheds:wheel /opt/apacheds

USER apacheds
WORKDIR /opt/apacheds/
ENTRYPOINT ["/bin/bash", "-c"]
CMD ["/opt/apacheds/run_apacheds.sh"]
EXPOSE 389
COPY --chown=apacheds:wheel ./docker/ldap/apacheds-2.0.0.AM26.tar.gz ./docker/ldap/run_apacheds.sh /opt/apacheds/
RUN tar --strip-components=1 -vxzf apacheds-2.0.0.AM26.tar.gz
COPY --chown=apacheds:wheel ./docker/ldap/run_apacheds.sh                                         /opt/apacheds/
COPY --chown=apacheds:wheel ./docker/ldap/ldap_import.ldif                                        /tmp/
COPY --chown=apacheds:wheel ./docker/ldap/config.ldif                                             /tmp/

RUN  chmod +x /opt/apacheds/run_apacheds.sh 

Сценарий для запуска apacheds следующий:

#!/bin/ash

LDAP_PORT_VAR=${LDAP_PORT:-10389}
LDAP_HOST_VAR=${LDAP_HOST:-127.0.0.1}

function ping() {
  ldapsearch -h ${LDAP_HOST_VAR} -p ${LDAP_PORT_VAR} -D 'cn=Directory Manager' -w crewangels ou=People
}

function wait_for_ldap {
  echo "Waiting for LDAP availability..."
  max_retries=99
  counter=0

  ping
  while [[ $? -ne 0 ]] ; do
    if [[ ${counter} -ge ${max_retries} ]] ; then
      echo ":( Failed after [${counter}] retries: LDAP still wasn't be able to start."
      exit 2
    fi

    if [[ ${counter} -gt 0 ]] ; then
      echo "waiting for ${counter}/${max_retries} retry..."
    fi

    sleep 1s
    counter=$((counter+1))
    # NOTE: ping command should be latest in this loop: it's result is using as a while condition afterwards
    ping
  done
}

rm -rf /var/lib/apacheds/default/run/apacheds-default.pid
mkdir /opt/apacheds/instances/jeppesen
cp /tmp/config.ldif /opt/apacheds/instances/default/conf/config.ldif
/opt/apacheds/bin/apacheds.sh default start
wait_for_ldap
ldapadd -h ${LDAP_HOST_VAR} -p ${LDAP_PORT_VAR} -D "cn=Directory Manager" -w crewangels -f /tmp/ldap_import.ldif

# Healthcheck
mkdir -p /tmp/health/
echo "true" >> /tmp/health/ready

#trap "echo 'Stopping Apache DS';/opt/apacheds/bin/apacheds.sh default stop;exit 0" SIGTERM SIGKILL
while true ; do
  tail -f /dev/null & wait ${!}
done

Идея замены текущей схемы по умолчанию основана на замене конфигурации по умолчанию .ldif файл с пользовательским:

cp /tmp/config.ldif /opt/apacheds/instances/default/conf/config.ldif

и последующим запуском сервера. Однако после этого я не могу пропинговать сервер LDAP. Может, кто-нибудь подскажет, что я делаю не так?

PS При необходимости, для лучшего понимания можно прикрепить ldif-файлы конфигурации по умолчанию и пользовательские настройки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...