如何正常closuresdocker中运行的服务器

我通过docker文件中的ENTRYPOINTconfiguration启动mongodb。 它工作正常。 但是,当我执行:

docker stop <containerid> 

它似乎是发送一个SIGTERM的过程。 这意味着mongod.lock文件不会被清除。 我如何正常closures正在运行的docker集装箱,以便正确的信号发送到docker运行的进程?

我不知道明白。 docker stop <id>确实会发送一个SIGTERM。 这是devise。 如果进程没有在超时时间内正常closures(默认值是10秒),则会发出一个SIGKILL。

目前,我们确实对信号传播有一些问题。 这是由于pid命名空间和进程有一个pid的事实1.这应该很快与新的执行插件得到解决。

我正在使用docker 0.9。 当呼叫docker停止时,SIGTERM将被发送到容器内的PID = 1进程。 所以我们可以用supervisord,runit来pipe理子stream程。

问题是当我们调用$ service docker stop | restart ,或主机复位时。 Docker不会将SIGTERM发送到所有正在运行的容器。 我试图解决这个案子。

使用Docker 0.9或更高版本,默认情况下,它将发送SigTerm到第一个进程(在容器中运行)。

但是请注意环境variables文件(Ubuntu中的/ etc / default / docker和CentOS中的/ etc / sysconfig / docker )应该包含DOCKER_OPTS =“-r = false” (或者在CentOS中为other_args =“-r = false”docker从autorestart容器。

例如,我正在使用这个configuration: DOCKER_OPTS =“-g / mydir / docker -r = false –dns 8.8.4.4”

如果要在一个容器中运行多进程,则应该使用supervisord作为第一个进程,supervisord将pipe理其他进程并将信号传递给它们。