Docker中的PID 1持续存在

spa*_*iot 3 containers pid twisted docker

我已经设置了一个Kippo服务器在docker容器中运行.一切都运行良好,直到你杀了容器.杀死容器(通过重新启动机器或通过docker kill)使其无法使用STDERR"另一个扭曲的服务器正在运行,PID 1".我怎么解决这个问题?我没有问题重置容器的文件系统或类似的东西,因为我想要的一切都记录到数据库.非常感谢你

Gly*_*yph 8

在Docker中,每个容器都在自己的PID名称空间中运行.这意味着dockerfile启动的进程将始终为PID 1,并且PID将从那里向上计数.

twistd期望PID足够不确定,它可以twistd通过简单地比较以查看PID是否相同来检查另一个是否"已在运行".因为在Docker中,PID总是为1,所以这个检查总是成功,并twistd认为它不应该启动.如果容器以非干净的方式退出,twistd则无法清理其.pid文件,并且状态将保留在容器的文件系统中.

由于Docker守护程序将命名空间容器并阻止两个匹配twistd进程同时启动,因此该.pid文件及其相关检查实际上并不实用,因此您应该禁用它.您可以通过更改命令行来禁用它,以在插件名称之前包含--pidfile=选项(完全相同,在" =" 之后没有任何内容).我不熟悉Kippo,但是因为twistd web这样twistd --pidfile= web.

我希望这个对你有用!