自动启动容器
预计阅读时间:3分钟
Docker提供重启策略 来控制您的容器在退出时还是在Docker重新启动时自动启动。重新启动策略确保链接的容器以正确的顺序启动。Docker建议您使用重启策略,并避免使用流程管理器来启动容器。
重新启动策略--live-restore
与dockerd
命令标志不同。使用--live-restore
可以使您的容器在Docker升级期间保持运行,尽管网络和用户输入被中断。
使用重启策略
要为容器配置重启策略,请--restart
在使用docker run
命令时使用该标志。--restart
标志的值可以是以下任意值:
旗帜 | 描述 |
---|---|
no |
不要自动重启容器。(默认) |
on-failure |
如果容器由于错误而退出,请重新启动容器,该错误表示为非零退出代码。 |
always |
如果容器停止,请务必重新启动它。如果手动停止,则仅在Docker守护进程重新启动或容器本身手动重新启动时才重新启动。(请参阅重新启动策略详细信息中列出的第二个项目符号) |
unless-stopped |
与相似always ,除了在容器停止(手动或其他方式)时,即使重新启动Docker守护程序也不会重新启动容器。 |
以下示例启动Redis容器并将其配置为始终重新启动,除非已明确将其停止或重新启动Docker。
$ docker run -d --restart unless-stopped redis
此命令更改名为的已运行容器的重启策略redis
。
$ docker update --restart unless-stopped redis
并且此命令将确保除非停止,否则将重新启动所有当前正在运行的容器。
$ docker update --restart unless-stopped $(docker ps -q)
重新启动政策详细信息
使用重新启动策略时,请牢记以下几点:
-
重新启动策略仅在容器成功启动后才生效。在这种情况下,成功启动意味着该容器已启动至少10秒钟,并且Docker已开始对其进行监视。这样可以防止根本无法启动的容器进入重启循环。
-
如果您手动停止容器,则其重新启动策略将被忽略,直到Docker守护程序重新启动或手动重新启动容器为止。这是防止重新启动循环的另一种尝试。
使用流程管理器
如果重新启动策略不满足您的需求(例如,当Docker外部的进程依赖于Docker容器时),则可以使用进程管理器(例如 upstart, systemd或 supervisor)代替。
警告
不要尝试将Docker重新启动策略与主机级流程管理器结合使用,因为这会产生冲突。
要使用流程管理器,请将其配置为使用通常用于手动启动容器的相同命令docker start
或docker service
命令来启动您的容器或服务。有关更多详细信息,请查阅特定过程管理器的文档。
在容器内使用流程管理器
流程管理器还可以在容器内运行,以检查某个流程是否正在运行,如果没有,则启动/重新启动它。
容器,重新启动,策略,自动化,管理警告
它们不支持Docker,仅监视容器内的操作系统进程。Docker不推荐这种方法,因为它依赖于平台,甚至在给定Linux发行版的不同版本中也有所不同。