Мы пытаемся установить сервер 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-файлы конфигурации по умолчанию и пользовательские настройки.