名称

podman-container-runlabel - 执行容器镜像标签描述的命令

简介

podman container runlabel [选项] 标签 镜像 [参数…]

描述

podman container runlabel 读取 镜像 的指定 标签 并将其作为命令在主机上执行。如果标签不存在,Podman 将会因错误而退出。附加参数会添加到命令中。

过去,容器镜像描述了内容(例如,层)以及容器运行时(例如,crun(1) 或 runc(1))如何执行容器。例如,镜像可以在其配置中设置环境和命令。然而,容器镜像不能直接指定像 Podman 这样的容器引擎如何执行它。例如,镜像配置不包括有关日志驱动程序、命名空间或它需要正确运行哪些功能的信息。

podman container runlabel 以一种简单而高效的方式解决了容器镜像的局限性。Podman 读取标签的内容并将其解释为在主机上执行的命令。通过这种方式,镜像可以精确描述 Podman 如何执行它。例如,一个内容为 /usr/bin/podman run -d --pid=host --privileged \${IMAGE} 的标签指示镜像以分离的、特权容器的方式执行,并使用主机的 PID 命名空间。这使得容器镜像的自描述从“是什么”提升到“如何做”。

请注意,runlabel 命令仅适用于受信任的环境。不建议在不受信任的镜像上使用此命令。

变量

标签的内容可以引用以下变量,这些变量在处理标签时会被替换。

IMAGE 镜像的名称。当执行 podman container runlabel label fedora 时,IMAGE 变量被替换为 fedora。有效格式为 IMAGE$IMAGE${IMAGE}=IMAGE

NAME--name 选项指定。格式与 IMAGE 属性的格式相同。

PWD 将替换为当前工作目录。

选项

--authfile=path

认证文件的路径。在 Linux 上默认为 ${XDG_RUNTIME_DIR}/containers/auth.json,在 Windows/macOS 上默认为 $HOME/.config/containers/auth.json。该文件由 podman login 创建。如果在此处未找到授权状态,则会检查 $HOME/.docker/config.json,该文件是使用 docker login 设置的。

注意:也可以通过设置 REGISTRY_AUTH_FILE 环境变量来覆盖认证文件的默认路径。这可以通过 export REGISTRY_AUTH_FILE=路径 来完成。

--cert-dir=path

使用 路径 下的证书(*.crt, *.cert, *.key)连接到注册表。(默认值:/etc/containers/certs.d)有关详细信息,请参阅 containers-certs.d(5)。(此选项不适用于远程 Podman 客户端,包括 Mac 和 Windows(不包括 WSL2)机器)

--creds=[username[:password]]

用于向镜像仓库进行身份验证的 [username[:password]](如果需要)。如果未提供一个或两个值,则会出现命令行提示,可以输入该值。密码输入时无回显。

请注意,指定的凭据仅用于针对目标注册表进行身份验证。它们不用于镜像或注册表被重写时(请参阅 containers-registries.conf(5));要针对这些进行身份验证,请考虑使用 containers-auth.json(5) 文件。

--display

显示已填充环境变量的镜像标签值。如果指定了 --display,则不执行 runlabel 命令。

--help, -h

打印用法说明

--name, -n=名称

使用此名称为容器创建内容。如果未指定,则名称默认为镜像的名称。

--quiet, -q

拉取镜像时抑制输出信息

--replace

如果存在具有当前名称的容器,则停止、删除它,并从该镜像创建一个新容器。

--tls-verify

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

示例

执行名为 foobar 的镜像的 run 标签。

$ podman container runlabel run foobar

执行名为 foobar 的镜像的 install 标签,并带有附加参数。

$ podman container runlabel install foobar apples oranges

显示镜像 foobar 的 run 标签的内容。

$ podman container runlabel --display run foobar

使用设置了固定容器名称的标签重新运行容器。--replace 标志确保首先删除任何现有容器。

$ podman ps -a
CONTAINER ID  IMAGE                             COMMAND               CREATED         STATUS                     PORTS       NAMES
1254c038d892  docker.io/library/busybox:latest  echo Hello from r...  26 seconds ago  Exited (0) 26 seconds ago              test-runlabel

$ podman container runlabel --replace RUN runlabel-test
Hello from runlabel

$ podman ps -a
CONTAINER ID  IMAGE                             COMMAND               CREATED        STATUS                    PORTS       NAMES
28efd9600d0c  docker.io/library/busybox:latest  echo Hello from r...  4 seconds ago  Exited (0) 4 seconds ago              test-runlabel

当标签使用固定名称(例如,--name mycontainer)并且您希望重复运行它而无需手动删除以前的容器时,此命令很有用。

另请参阅

podman(1), crun(1), runc(8), containers-certs.d(5), containers-auth.json(5), containers-registries.conf(5)

历史

2021 年 8 月,Valentin Rothberg(rothberg at redhat dot com)的改进

2018 年 9 月,由 Brent Baude(bbaude at redhat dot com)首次整理