我正在尝试创建一个带有自定义模式的 openLDAP docker 镜像,我希望在修改它之前有一个可用的 LDAP 服务。
我通过放入 dockerfile 在我的 docker 镜像中安装了 slapd 和 ldap-utils:
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y slapd ldap-utils
此时,当我在新容器中打开一个 bash 时,
service slapd status
或 /etc/init.d/slapd status
都输出“slapd is not running”。实际上,policy-rc 拒绝在安装包后执行启动。
嗯,没问题,
service slapd start
返回OK,启动slapd服务。我可以在我的 LDAP 中搜索,修改它,一切都很好。
想重启slapd服务的时候问题来了。
service slapd restart
,或service slapd force-reload
或service slapd stop
和service slapd start
都在“开始”命令时失败。 “停止”命令返回 OK。然而,这一次,service slapd status
返回“slapd is running”。另外,我仍然可以在我的 LDAP 中搜索。
为了更多地了解发生了什么,我尝试使用调试选项启动 slapd 服务,如:
slapd -h 'ldap:/// ldapi:///' -g openldap -u openldap -F /etc/ldap/slapd.d -d stats
不幸的是,这挂在“slapd starting”并且永远不会结束。
感谢您的帮助:)
我有同样的问题。当在容器内时,我发现停止 slapd 的唯一方法是
pkill slapd
尽管如此,这不适用于
Dockerfile
和run pkill slapd
我刚刚在基于 minideb (Debian Buster) 的 docker 镜像中遇到了同样的问题。
执行
service slapd stop
时,会调用stop_slapd
脚本的/etc/init.d/slapd
shell函数,依次执行这条命令:
start-stop-daemon --stop --quiet --oknodo --retry TERM/10 \
--pidfile "/var/run/slapd/slapd.pid" \
--exec /usr/sbin/slapd 2>&1
当您在 root shell 中执行此命令并省略
--quiet
标志时,将显示以下错误:
root@4d1b74229670:/# start-stop-daemon --stop --oknodo --retry TERM/10 --pidfile /var/run/slapd/slapd.pid --exec /usr/sbin/slapd
No /usr/sbin/slapd found running; none killed.
/var/run/slapd/slapd.pid
文件存在,/usr/sbin/slapd
可执行路径也是正确的,进程是这样可见的:
root@4d1b74229670:/# ps -efww | grep slapd
openldap 764 1 0 20:13 ? 00:00:00 /usr/sbin/slapd -h ldap:/// ldapi:/// -g openldap -u openldap -F /etc/ldap/slapd.d
root 779 1 0 20:22 pts/0 00:00:00 grep slapd
为了解决这个问题,我更改了
stop_slapd
函数中的 /etc/init.d/slapd
并将 --exec $SLAPD
替换为 --name slapd
:
stop_slapd() {
reason="`start-stop-daemon --stop --quiet --oknodo --retry TERM/10 \
--pidfile "$SLAPD_PIDFILE" \
--name slapd 2>&1`"
}
我使用 sed 应用更改:
sed -i 's/--exec $SLAPD 2/--name slapd 2/' /etc/init.d/slapd
这是解决问题的另一种方法:
SLAPD_PID=$(cat /run/slapd/slapd.pid)
kill -15 $SLAPD_PID
while [ -e /proc/$SLAPD_PID ]; do sleep 0.1; done # wait until slapd is terminated
这个对我有用,请记住我使用的是
ubuntu:22.04
图像
ENV DEBIAN_FRONTEND=noninteractive
RUN echo 'slapd/root_password password password' | debconf-set-selections && \
echo 'slapd/root_password_again password password' | debconf-set-selections && \
apt install -y slapd ldap-utils