我已经阅读了docker documentation关于容器重启策略的介绍。但是,我无法理解on-failure
和unless-stopped
之间的区别。
什么时候我会使用一个策略而不是另一个?在哪些情况下,某个策略会导致启动一个容器,而另一个策略不会?
我已经阅读了docker documentation关于容器重启策略的介绍。但是,我无法理解on-failure
和unless-stopped
之间的区别。
什么时候我会使用一个策略而不是另一个?在哪些情况下,某个策略会导致启动一个容器,而另一个策略不会?
2条答案
按热度按时间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
将显示一个重新启动的示例,直到您停止容器。字符串
kknvjkwl2#
Docker重启策略是为了在所有可能的崩溃中保持容器的活动状态,我们可以以多种方式利用它作为一个例子,如果我们有一个在容器上运行的Web服务器,并且即使在错误的请求下也必须保持它的活动状态,我们可以使用
unless-stopped
标志,它将保持服务器正常运行,直到我们手动停止它。重新启动标志可以是以下任何一种:
"no"
:-它是默认值,并且它永远不会重新启动容器。on-failure
:-每当遇到错误时,它将重新启动容器,或者说,每当容器内运行的进程以非零退出代码退出时。退出代码:- 0表示没有错误,我们故意终止了进程,但任何非零值都是错误。always
:-作为名称,它总是会重新启动容器,无论退出代码是什么。此外,即使我们手动停止它,它也会重新启动容器,但为此我们需要重新启动docker守护进程。unless-stopped
:-它类似于always
标志,唯一的区别是一旦容器被手动停止,即使在重新启动Docker守护进程之后,它也不会自动重新启动,直到我们再次手动启动容器。unless-stopped
和on-failure
之间的区别是第一个总是会重新启动,直到我们手动停止它,无论退出代码是什么,另一个只会在真实的失败时重新启动容器,即退出代码=非零。一旦容器停止,它的重启标志就会被忽略,这是克服重启循环的一种方法。这就是为什么在
always
标志的情况下,一旦我们手动停止它,容器就不会重启,直到我们重启docker守护进程。您可以通过创建一个简单的 redis-server 来轻松测试所有这些标志:
字符串