NAME

Podman-自动更新-根据容器的自动更新策略自动更新容器

SYNOPSIS

podman auto-update [options]

DESCRIPTION

podman auto-update 下载新的容器映像并重新启动配置为自动更新的容器。要使用自动更新,容器或Kubernetes工作负载必须在一个系统单元内运行。在成功更新映像之后,使用该映像的容器将通过重新启动它们所在的系统单元进行更新。请参阅 quadlet(5) 关于如何在system d下运行Podman。

若要为自动更新配置容器,必须使用 io.containers.autoupdate 标签或 AutoUpdate 中的字段 quadlet(5) 具有以下两个值之一:

  • registry :如果标签存在并设置为 registry ,Podman联系到相应的注册表,检查映像是否已更新。标签 image 是一种替代方案 registry 为了向后兼容而维护。如果本地存储中的摘要与远程映像中的摘要不同,则认为映像已更新。如果必须更新映像,Podman会将其删除并重新启动执行容器的system d单元。注册中心策略要求使用完全限定的镜像引用(例如,quay.io/podman/稳定:最新)来创建容器。这种强制执行对于知道要实际检查和拉入哪个图像是必要的。如果使用了图像ID,Podman将不再知道要检查/提取哪个图像。

  • local :如果自动更新标签设置为 local ,Podman将容器的图像摘要与本地容器存储中的图像摘要进行比较。如果它们不同,则认为本地映像较新,并重新启动SYSTEM D单元。

自动更新和Kubernetes YAML

Podman支持Kubernetes工作负载的自动更新。可通过以下方式直接配置自动更新策略 quadlet(5) 或者在Kubernetes YAML中使用下面提到的Podman特定的注释:

  • io.containers.autoupdate :“REGISTRY|LOCAL”将自动更新策略应用于所有容器

  • io.containers.autoupdate/$container :要将自动更新策略应用到的“注册表|本地” $container 仅限

  • io.containers.sdnotify :“conmon|CONTAINER”将sdtify策略应用于所有容器

  • io.containers.sdnotify/$container :“conmon|CONTAINER”要将sdtify策略应用到 $container 仅限

默认情况下,自动更新策略设置为“已禁用”,sdtify策略设置为“conmon”。

系统单元和定时器

Podman出厂时配备了一台 podman-auto-update.service SYSTEM D单位。此单元由每天午夜触发 podman-auto-update.timer 系统D计时器。如果需要,可以为定制的基于时间的更新更改计时器。该单元还可以由其他系统D单元调用(例如,通过依赖关系树)或通过 systemctl start podman-auto-update.service

OPTIONS

--authfile = path

身份验证文件的路径。缺省值为 ${XDG_RUNTIME_DIR}/containers/auth.json 在Linux上,以及 $HOME/.config/containers/auth.json 在Windows/MacOS上。该文件由创建 podman login 。如果在那里找不到授权状态, $HOME/.docker/config.json 被选中,它是使用 docker login

注意:还可以通过设置 REGISTRY_AUTH_FILE 环境变量这可以通过以下方式完成 export REGISTRY_AUTH_FILE=path

或者,也可以使用 io.containers.autoupdate.authfile 可以配置容器标签。在这种情况下,Podman将使用指定标签的值。

--dry-run

检查新镜像是否可用,但不执行任何拉取操作,也不重启任何服务或容器。这个 UPDATED 字段指示新镜像是否可用,并带有“Pending”。

--format = 格式化

更改默认输出格式。这可以是受支持的类型,如‘json’或GO模板。下面列出了GO模板的有效占位符:

Placeholder

Description

.容器

容器的ID和名称

.ContainerID

容器的ID

.ContainerName

容器的名称

.图像

图像的名称

.策略

容器的自动更新策略

.单位

系统数据单元的名称

.已更新

更新状态:真、假、失败

--rollback

如果在更新映像后重新启动SYSTEM D单元失败,请回滚到使用以前的映像,并在另一次重新启动该单元。默认值为True。

请注意,检测SYSTEM D单元是否出现故障最好由容器通过SDNOTIFY发送就绪消息来完成。这样,重新启动设备将一直等到收到消息或超时生效。否则,即使容器在不久之后出现故障,重新启动SYSTEM D单元也可能成功。

要使容器通过SDNOTIFY发送就绪消息,必须使用 --sdnotify=container 选项(参见Podman-Run(1))。然后,在容器内运行的应用程序可以执行 systemd-notify --ready 当准备好或使用特定编程语言(例如,SD_NOTIFY(3))的SDNOTIFY绑定时。

--tls-verify

联系注册处时要求HTTPS并验证证书(默认: true )。如果显式设置为 true ,使用TLS验证。如果设置为 false ,不使用TLS验证。如果未指定,则使用TLS验证,除非目标注册表在 containers-registries.conf(5)

EXAMPLES

创建配置为自动更新的Quadlet文件:

$ cat ~/.config/containers/systemd/sleep.container
[Container]
Image=registry.fedoraproject.org/fedora:latest
Exec=sleep infinity
AutoUpdate=registry

通过重新加载系统d用户守护进程,从Quadlet文件生成一个系统d服务:

$ systemctl --user daemon-reload

启动system d服务并确保容器正在运行

$ systemctl --user start sleep.service
$ podman ps
CONTAINER ID  IMAGE                                     COMMAND         CREATED        STATUS        PORTS       NAMES
f8e4759798d4  registry.fedoraproject.org/fedora:latest  sleep infinity  2 seconds ago  Up 2 seconds              systemd-sleep

检查是否有新的映像可通过 --dry-run

$ podman auto-update --dry-run --format "{{.Image}} {{.Updated}}"
registry.fedoraproject.org/fedora:latest   pending

更新服务:

$ podman auto-update
UNIT           CONTAINER                     IMAGE                                     POLICY      UPDATED
sleep.service  f8e4759798d4 (systemd-sleep)  registry.fedoraproject.org/fedora:latest  registry    true

另请参阅

podman(1)podman-generate-systemd(1)podman-run(1)podman-systemd.unit(5)sd_notify(3)systemd.unit(5)