首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Docker镜像中,"Slapd stop“成功,但slapd仍在运行

在Docker镜像中,"Slapd stop“成功,但slapd仍在运行
EN

Stack Overflow用户
提问于 2015-06-06 00:42:56
回答 3查看 1.3K关注 0票数 1

我正在尝试创建一个具有自定义模式的LDAP镜像,并且我希望在修改它之前有一个可以工作的openLDAP服务。

我在docker镜像中安装了slapd和ldap-utils,方法是将以下内容放入dockerfile:

代码语言:javascript
复制
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拒绝在安装包之后执行start。

好吧,没问题,service slapd start返回OK并启动slapd服务。我可以在我的LDAP中搜索,修改它,一切都很好。

当我想重新启动slapd服务时,问题就来了。service slapd restartservice slapd force-reloadservice slapd stopservice slapd start在“开始”命令时都会失败。"stop“命令返回OK。但是,这一次,service slapd status返回"slapd is running“。此外,我仍然可以在我的LDAP中进行搜索。

为了更多地了解发生了什么,我尝试使用debug选项启动slapd服务,如下所示:

代码语言:javascript
复制
slapd -h 'ldap:/// ldapi:///' -g openldap -u openldap -F /etc/ldap/slapd.d -d stats

不幸的是,这挂在“草率开始”,并永远不会结束。

感谢您的帮助:)

EN

回答 3

Stack Overflow用户

发布于 2016-01-23 22:06:42

我也有同样的问题。当在容器中时,我发现停止slapd的唯一方法是pkill slapd

然而,这不适用于Dockerfilerun pkill slapd

票数 1
EN

Stack Overflow用户

发布于 2016-04-01 15:14:39

这是解决问题的另一种方法:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2019-11-11 04:35:07

我刚刚在一个基于minideb (Debian Buster)的docker镜像中遇到了同样的问题。

在执行service slapd stop时,将调用/etc/init.d/slapd脚本的stop_slapd外壳函数,该函数依次执行以下命令:

代码语言:javascript
复制
start-stop-daemon --stop --quiet --oknodo --retry TERM/10 \
  --pidfile "/var/run/slapd/slapd.pid" \
  --exec /usr/sbin/slapd 2>&1

当您在根shell中执行此命令并省略--quiet标志时,将显示以下错误:

代码语言:javascript
复制
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可执行文件路径也是正确的,过程如下所示:

代码语言:javascript
复制
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

为了解决这个问题,我更改了/etc/init.d/slapd函数中的stop_slapd,并将--exec $SLAPD替换为--name slapd

代码语言:javascript
复制
stop_slapd() {
        reason="`start-stop-daemon --stop --quiet --oknodo --retry TERM/10 \
                --pidfile "$SLAPD_PIDFILE" \
                --name slapd 2>&1`"
}

我使用sed应用了更改

代码语言:javascript
复制
sed -i 's/--exec $SLAPD 2/--name slapd 2/' /etc/init.d/slapd
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30671693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档