docker 容器重启是如何工作的?

Par*_*dhu 4 containers docker

例如,当 docker 容器有 100 个进程在运行时,我们使用docker restart container-namedocker 如何重新启动所有这 100 个进程来重新启动容器?

它会存储所有进程的详细信息并重新启动它们吗?

编辑:

以下可以被视为我想要回答的具体问题:

启动容器后,我使用登录到容器docker exec -it container-name bash并启动一些后台进程。然后我退出容器并执行 adocker restart或 astop后跟 a start。我会让那些手动启动的进程自动再次运行吗?

Dav*_*aze 7

一个 Docker 容器有一个主要进程。 docker restart做两件事:

  1. 它相当于docker stop. 它将 SIGTERM 发送到其主进程(仅);如果在 10 秒内没有终止,它会发送 SIGKILL。如果主进程还有子进程,它们也会被强制终止
  2. 它相当于docker start. 在已经存在的容器中,它运行容器的命令,通过连接其入口点和命令列表来构建。

请注意,这两者都专注于一个过程。如果该进程是像 supervisord 这样的专用进程管理器,那么该docker stop序列有望使主管优雅地停止它正在管理的每个进程,你就没事了。如果它是一个 shell 脚本,它启动了一堆后台进程并忽略它们,它们将在没有警告的情况下被杀死。类似地,如果主容器进程知道如何启动它的子进程docker start,那么它会再次发生,但如果它是一个交互式 shell 并且您手动启动了后台进程,它们就会丢失。

Docker 没有任何类型的“快照”机制。一般模型是容器总是从一个干净和已知的状态开始,并且可以从那里重建他们需要的任何东西。与再次尝试相比,此模型更适合docker rm停止的容器和docker run新的容器docker start