Docker重启策略on-failure和unless-stopped的区别?

g0czyy6m  于 12个月前  发布在  Docker
关注(0)|答案(2)|浏览(362)

我已经阅读了docker documentation关于容器重启策略的介绍。但是,我无法理解on-failureunless-stopped之间的区别。
什么时候我会使用一个策略而不是另一个?在哪些情况下,某个策略会导致启动一个容器,而另一个策略不会?

clj7thdc

clj7thdc1#

如果退出代码指示失败,on-failure将发出重启,而unless-stopped的行为类似于always,并且将保持示例运行,除非容器停止。
你可以尝试使用hello-world来看看区别。
docker run --restart on-failure hello-world将运行一次并成功退出,运行后续的docker ps将指示当前没有容器的运行示例。
但是,即使容器成功退出,docker run --restart unless-stopped hello-world也会重新启动容器,因此随后运行docker ps将显示一个重新启动的示例,直到您停止容器。

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                                  PORTS               NAMES
4d498ebd13a6        hello-world         "/hello"            2 seconds ago       Restarting (0) Less than a second ago                       modest_keldysh

字符串

kknvjkwl

kknvjkwl2#

Docker重启策略是为了在所有可能的崩溃中保持容器的活动状态,我们可以以多种方式利用它作为一个例子,如果我们有一个在容器上运行的Web服务器,并且即使在错误的请求下也必须保持它的活动状态,我们可以使用unless-stopped标志,它将保持服务器正常运行,直到我们手动停止它。
重新启动标志可以是以下任何一种:

  1. "no":-它是默认值,并且它永远不会重新启动容器。
  2. on-failure:-每当遇到错误时,它将重新启动容器,或者说,每当容器内运行的进程以非零退出代码退出时。退出代码:- 0表示没有错误,我们故意终止了进程,但任何非零值都是错误。
  3. always:-作为名称,它总是会重新启动容器,无论退出代码是什么。此外,即使我们手动停止它,它也会重新启动容器,但为此我们需要重新启动docker守护进程。
  4. unless-stopped:-它类似于always标志,唯一的区别是一旦容器被手动停止,即使在重新启动Docker守护进程之后,它也不会自动重新启动,直到我们再次手动启动容器。
    unless-stoppedon-failure之间的区别是第一个总是会重新启动,直到我们手动停止它,无论退出代码是什么,另一个只会在真实的失败时重新启动容器,即退出代码=非零。
    一旦容器停止,它的重启标志就会被忽略,这是克服重启循环的一种方法。这就是为什么在always标志的情况下,一旦我们手动停止它,容器就不会重启,直到我们重启docker守护进程。
    您可以通过创建一个简单的 redis-server 来轻松测试所有这些标志:
docker run -d --restart=always --name redis-server redis  # start redis image
 docker container ls # test the status 
 docker stop redis-server # stop the container manually
 docker container ls # test the status again, got the redis-server did not restarted 
 sudo service docker restart # restart the docker daemon 
 # test the status again will find the container is again up and running
 # try the same steps by changing the restart flag with *unless-stopped*
 docker update --restart=unless-stopped redis-server # will update the restart flag of running container.

字符串

相关问题