gpt4 book ai didi

docker - CentOS7 : How to start the slapd service in a docker container?

转载 作者:行者123 更新时间:2023-12-02 19:25:30 24 4
gpt4 key购买 nike

我想使用 CentOS7 在 docker 容器中运行 OpenLDAP 服务器。
我设法让一个容器运行,其中安装了 openldap。我的问题是我正在使用脚本 entrypoint.sh 来启动 slapd 服务并将用户添加到我的目录中。我希望这两个步骤在 Dockerfile 中,这样执行 ldapadd 的密码就不会存储在脚本中。

到目前为止,我只在 debian 上找到了示例。
https://github.com/kanboard/docker-openldap/blob/master/memberUid/Dockerfile这是我想做的,但使用 CentOS 7。
我尝试在我的 Dockerfile 中启动 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 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 服务并在 Dockerfile 中执行 ldapadd 命令,以便将 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: Invalid credentials (49)

最佳答案

(a) 您可以使用 docker-systemctl-replacement运行你的“systemctl.py start slapd”。这是明显的第一个错误。

(b) dockerfile 中的每个 RUN 都是一个新容器,因此之前调用的正在运行的进程无论如何都无法生存。这就是为什么引用的 dockerfile 示例将它与“&&”结合在一起。

是的 (c) 我正在使用一个 openldap centos 容器。所以去吧,再试一次。

关于docker - CentOS7 : How to start the slapd service in a docker container?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56633546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com