跳到主要内容

Podman -restart 命令详解

Podman 是一个强大的容器管理工具,用于在 Linux 系统上创建、运行和管理容器。其中,podman restart 命令用于重启已经存在的容器。这对于容器在运行过程中遇到问题时,或者需要更新配置后重新加载容器时非常有用。

基本语法

podman restart [OPTIONS] CONTAINER [CONTAINER...]

参数说明

  • CONTAINER: 要重启的容器的名称或ID。可以指定一个或多个容器。

可选参数(OPTIONS)

  • -a, --all: 重启所有容器,不论其当前状态。
  • --cidfile: 从指定的文件中读取容器ID进行重启。可以指定多个文件。
  • -l, --latest: 重启最新的容器。如果有多个容器,则只重启最后创建的容器。
  • --running: 仅重启当前处于运行状态的容器。
  • --time, -t: 设置容器重启的超时时间(以秒为单位)。如果容器在指定的时间内没有成功重启,则命令会失败。

--all-a

无论当前状态如何,重启所有容器。

--cidfile

从指定的文件中读取容器 ID 并重启该容器。可以指定多次。

--filter-f=filter

过滤要重启的容器。 可以使用多个 --filter 标志来指定多个过滤器。 具有相同键的过滤器是包含性的,唯一例外的是 label 过滤器,它是排他性的。具有不同键的过滤器总是排他性的。 关于 podman restart 命令的说明,它用于重启一个或多个容器。podman 是一个用于管理容器的工具,类似于 Docker,但更加轻量级。

在“选项”部分,有几个重要的选项被列出:

  • --all-a:这个选项允许用户重启所有容器,无论它们当前是运行状态还是停止状态。
  • --cidfile:这个选项允许用户从指定的文件中读取容器 ID,并重启与该 ID 对应的容器。这对于批量处理或自动化脚本可能很有用,因为你可以在一个文件中列出多个容器 ID,并一次性重启它们。
  • --filter-f:这个选项允许用户基于特定条件过滤要重启的容器。例如,你可能只想重启具有特定标签的容器,或者只重启在某个时间点之后创建的容器。通过使用多个 --filter 选项,你可以组合多个条件来进一步缩小要重启的容器的范围。注意,label 过滤器是排他性的,意味着如果指定了多个 label 过滤器,它们不会组合使用,而是仅应用一个。而对于具有不同键的过滤器(例如标签、创建时间等),它们是排他性的,即它们不会互相影响。

以下列出了有效的过滤器:

过滤器描述
id[ID] 容器的 ID(默认按前缀匹配;接受正则表达式)
name[Name] 容器的名称(接受正则表达式)
label[Key][Key=Value] 分配给容器的标签
exited[Int] 容器的退出码
status[Status] 容器的状态:'created'(已创建)、'exited'(已退出)、'paused'(已暂停)、'running'(运行中)、'unknown'(未知)
ancestor[ImageName] 用于创建容器的镜像或其后代
before[ID][Name] 在此容器之前创建的容器
since[ID][Name] 在此容器之后创建的容器
volume[VolumeName][MountpointDestination] 容器中挂载的卷
health[Status] healthy(健康)或 unhealthy(不健康)
pod[Pod] pod 的名称或完整或部分 ID
network[Network] 网络的名称或完整 ID
until[DateTime] 在给定时间之前创建的容器

这些过滤器可以单独或组合使用,以精确选择你想要重启的容器。例如,你可以使用 name 过滤器来只重启具有特定名称的容器,或者使用 status 过滤器来重启所有处于运行状态或已退出状态的容器。

--running

仅重启所有已经处于 running(运行中)状态的容器。

示例

重启特定容器

podman restart mycontainer

这将重启名为 mycontainer 的容器。

重启多个容器

podman restart container1 container2

这将同时重启名为 container1container2 的两个容器。

重启最新创建的容器

podman restart -l

这将重启最后创建的容器。

重启所有运行中的容器

podman restart --running

使用 --running 标志将只重启当前处于运行状态的所有容器。

重启所有容器并设置超时时间

podman restart --all --time 10

这将重启所有容器,并设置每个容器的重启超时时间为 10 秒。

使用 cidfile 重启容器

假设你之前使用 --cidfile 选项运行了一个容器,并将容器ID保存在了某个文件中:

podman run --cidfile /tmp/mycontainer.cid ...

你可以使用相同的 cidfile 来重启这个容器:

podman restart --cidfile /tmp/mycontainer.cid

重启最新的容器。

$ podman restart -l
ec588fc80b05e19d3006bf2e8aa325f0a2e2ff1f609b7afb39176ca8e3e13467

通过容器的部分 ID 重启特定的容器。

$ podman restart ff6cf1
ff6cf1e5e77e6dba1efc7f3fcdb20e8b89ad8947bc0518be1fcb2c78681f226f

使用 4 秒的超时时间,通过名称重启两个容器。

$ podman restart --time 4 test1 test2
c3bb026838c30e5097f079fa365c9a4769d52e1017588278fa00d5c68ebc1502
17e13a63081a995136f907024bcfe50ff532917988a152da229db9d894c5a9ec

重启所有正在运行的容器。

podman restart --running

重启所有容器。

podman restart --all

使用在给定文件中指定的 ID 重启容器。

podman restart --cidfile /home/user/cidfile-1
podman restart --cidfile /home/user/cidfile-1 --cidfile ./cidfile-2

注意事项

  • 在重启容器时,容器会先被停止,然后再次启动。这意味着容器内的所有运行状态(如内存中的数据)都会丢失。
  • 如果容器在重启过程中遇到问题(如无法启动),podman restart 命令可能会失败,并显示错误信息。
  • 在使用 --time 选项时,要确保设置的超时时间足够长,以便容器能够正常重启。过短的超时时间可能会导致容器无法成功重启。

另请参阅

podman(1)

历史

2018 年 3 月,最初由 Matt Heon 整理编写。