我想在我的服务器上的docker中运行Dovecot服务器。守护程序进程成功启动,但每当我尝试重新加载配置,重新启动或停止守护程序时,我都会收到以下错误:
start-stop-daemon: warning: failed to kill X: Permission denied
其中X是鸽舍过程的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镜像由https://github.com/tomav/docker-mailserver中的Dockerfile定义。
我的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
或service dovecot start
/usr/sbin/dovecot reload
或service dovecot stop/restart
运行dovecot会出现同样的错误
我看到它的方式,当重新加载/重新启动/停止时,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
我对这一切有点吃惊,我真的不知道下一步该做什么,除了尝试一个完全不同的图像而不是一个全新安装的dovecot的docker-mailserver,看看是否能修复错误。但这是我想避免的。这不是我第一次运行dovecot服务器,但我从来没有这样的东西。