自动启动容器

预计阅读时间:3分钟

Docker提供重启策略 来控制您的容器在退出时还是在Docker重新启动时自动启动。重新启动策略确保链接的容器以正确的顺序启动。Docker建议您使用重启策略,并避免使用流程管理器来启动容器。

重新启动策略--live-restoredockerd 命令标志不同。使用--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容器时),则可以使用进程管理器(例如 upstartsystemdsupervisor)代替。

警告

不要尝试将Docker重新启动策略与主机级流程管理器结合使用,因为这会产生冲突。

要使用流程管理器,请将其配置为使用通常用于手动启动容器的相同命令docker startdocker service命令来启动您的容器或服务。有关更多详细信息,请查阅特定过程管理器的文档。

在容器内使用流程管理器

流程管理器还可以在容器内运行,以检查某个流程是否正在运行,如果没有,则启动/重新启动它。

警告

它们不支持Docker,仅监视容器内的操作系统进程。Docker不推荐这种方法,因为它依赖于平台,甚至在给定Linux发行版的不同版本中也有所不同。

容器重新启动策略自动化管理