问题
我想在我的服务器上的 docker 内运行 Dovecot 服务器。守护进程成功启动,但每当我尝试重新加载配置、重新启动或停止守护进程时,都会出现以下错误:
start-stop-daemon: warning: failed to kill X: Permission denied
其中 X 是 dovecot 进程的 PID。我试图找到任何接近我得到的错误的东西,但没有成功。
有关环境的更多信息
我在基于以下 Linux 版本的 Docker 容器内运行该进程:
Linux 3b71bd992d42 4.10.0-21-generic #23-Ubuntu SMP Fri Apr 28 16:14:22 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Docker 镜像由 Dockerfile 定义在https://github.com/tomav/docker-mailserver。
我的 dovecot 本地配置看起来像
disable_plaintext_auth = no
mail_privileged_group = mail
log_path = /var/log/dovecot.log
mail_location = mbox:/var/mail/%u
userdb {
driver = passwd
}
passdb {
args = %s
driver = pam
}
protocols = " imap"
protocol imap {
mail_plugins = " autocreate"
}
plugin {
autocreate = Trash
autocreate2 = Sent
autosubscribe = Trash
autosubscribe2 = Sent
}
service auth {
unix_listener /var/spool/postfix/private/auth {
group = postfix
mode = 0660
user = postfix
}
}
ssl=required
ssl_cert = < my pem certificate
ssl_key = < my private key
使用/usr/sbin/dovecot -c myconfig
或运行 dovecotservice dovecot start
时会出现相同的错误,当我运行或/usr/sbin/dovecot reload
时service dovecot stop/restart
有关我尝试过的更多信息
在我看来,当重新加载/重新启动/停止时,dovecot 会尝试终止正在运行的进程,但在本例中失败了。我尝试做的第一件事是以 root 身份手动终止此进程。这给了我同样的错误...所以我检查了进程的状态。一个简单的 ps aux 告诉我 dovecot 进程处于 Ss 状态。
root 1 0.0 0.0 18244 3380 ? Ss 08:47 0:00 /bin/bash
root 32 0.0 0.0 18036 2656 ? Ss 08:47 0:00 /usr/sbin/dovecot -c /etc/dovecot/dovecot.conf
dovecot 34 0.0 0.0 9520 1012 ? S 08:47 0:00 dovecot/anvil
root 35 0.0 0.0 9652 1056 ? S 08:47 0:00 dovecot/log
root 37 0.0 0.0 25300 4036 ? S 08:47 0:00 dovecot/config
root 64 0.0 0.0 34424 2884 ? R+ 08:57 0:00 ps aux
我尝试使用 strace 查看阻塞调用是什么,但不幸的是
root@3b71bd992d42:/# strace -d -p 32
strace: new tcb for pid 32, active tcbs:1
strace: ptrace_setoptions = 0x11
strace: PTRACE_SEIZE doesn't work
另一个我不再知道的错误。
pstree
给我
bash-+-dovecot-+-anvil
| |-config
| `-log
`-pstree
我对这一切感到有点吃惊,我真的不知道下一步该做什么,除了尝试一个与 docker-mailserver 完全不同的镜像,并重新安装 dovecot,看看是否能修复错误。但这是我想避免的事情。这不是我第一次运行 dovecot 服务器,但我从来没有遇到过这样的事情。