重新启动docker服务会杀死所有容器吗?

时间:2020-08-16 07:17:52

标签: docker ubuntu

我遇到了docker ps无法返回并卡住的docker问题。

我发现doinng docker服务会重新启动类似 sudo service docker restarthttps://forums.docker.com/t/what-to-do-when-all-docker-commands-hang/28103/4

但是我担心它是否会杀死所有正在运行的容器? (我猜该服务确实提供了服务,以便Docker容器可以运行?)

1 个答案:

答案 0 :(得分:2)

在默认配置中,您的假设是正确的:If the docker daemon is stopped, all running containers are shut down.。但是,如链接上所述,可以通过添加

在docker >= 1.12上更改此行为
{
  "live-restore": true
}

/etc/docker/daemon.json。关键:必须重新启动守护程序,此更改才能生效。请注意实时重新加载的限制,例如仅支持补丁程序版本升级,不支持主要版本升级。

另一种可能性是define a restart policy when starting a container。为此,在通过--restart启动容器时,将以下值之一作为命令行参数docker run的值传递:

no                Do not automatically restart the container. (the default)
on-failure        Restart the container if it exits due to an error, which manifests
                  as a non-zero exit code.
always            Always restart the container if it stops. If it is manually stopped,
                  it is restarted only when Docker daemon restarts or the container 
                  itself is manually restarted. 
                  (See the second bullet listed in restart policy details)
unless-stopped    Similar to always, except that when the container is stopped
                  (manually or otherwise), it is not restarted even after Docker
                  daemon restarts.

对于您的具体情况,这意味着您可以:

  • 使用--restart always重新启动所有容器(有关更多信息,请参见下文)
  • 重新配置docker守护程序以允许实时重新加载
  • 重新启动docker守护进程(尚未配置为实时重新加载,但将在此重新启动之后进行)

此重新启动将关闭,然后重新启动所有容器一次。但是从那时起,您应该可以在容器不终止的情况下自由停止docker守护程序。


处理主要版本升级

如上所述,实时重新加载无法处理主要版本升级。对于主要版本升级,必须拆除所有正在运行的容器。但是,如果使用重启策略always,则在升级后重启docker守护程序后,将重启容器。