名称¶
podman-exec - 在运行中的容器内执行命令
简介¶
podman exec [选项] 容器 命令 [参数 …]
podman container exec [选项] 容器 命令 [参数 …]
描述¶
podman exec 在运行中的容器内执行命令。
选项¶
--cidfile=文件¶
从指定文件中读取目标容器的ID。
--detach, -d¶
启动 exec 会话,但不附加到它。命令在后台运行,exec 会话完成后会自动移除。podman exec 命令会打印 exec 会话的 ID,并在启动后立即退出。
--detach-keys=序列¶
指定分离容器的按键序列。格式是单个字符 [a-Z]
或一个或多个 ctrl-<value>
字符,其中 <value>
是以下之一:a-z
、@
、^
、[
、,
或 _
。指定 “” 会禁用此功能。默认值为 ctrl-p,ctrl-q。
此选项也可以在 containers.conf(5) 文件中设置。
--env, -e=环境变量¶
设置环境变量。
此选项允许为容器内启动的进程设置任意环境变量。如果指定环境变量时没有值,Podman 会检查主机环境中的值,并且仅当主机上设置了该变量时才设置该变量。特殊情况下,如果指定了以 * 结尾且没有值的环境变量,Podman 会在主机环境中搜索以该前缀开头的变量,并将这些变量添加到容器中。
--env-file=文件¶
读取包含一行一个环境变量的文件。
--interactive, -i¶
设置为 true 时,使 stdin 可用于所包含的进程。如果为 false,所包含进程的 stdin 将为空并立即关闭。
如果已附加,stdin 将管道传输到所包含的进程。如果已分离,读取 stdin 将阻塞,直到稍后附加。
注意: Podman 会在 stdin 可用时立即消耗输入,即使所包含的进程未请求它。
--latest, -l¶
不提供名称或 ID,而是使用最新创建的容器。注意:最新创建的容器可能来自主机上 Podman 的其他用户。(此选项不适用于远程 Podman 客户端,包括 Mac 和 Windows(WSL2 除外)机器)
--preserve-fd=FD1[,FD2,…]¶
将逗号分隔列表中指定的额外文件描述符传递给进程。可以多次指定。此选项仅在 crun OCI 运行时支持。将此选项与其他 OCI 运行时一起使用可能会带来安全风险。
(此选项不适用于远程 Podman 客户端,包括 Mac 和 Windows(不包括 WSL2)机器)
--preserve-fds=N¶
将 N 个额外的文件描述符(除了 0, 1, 2)传递给进程。总的 FD 为 3+N。(此选项不适用于远程 Podman 客户端,包括 Mac 和 Windows(不包括 WSL2)机器)
--privileged¶
为此容器赋予扩展权限。默认值为 false。
默认情况下,Podman 容器是无特权的(=false),例如,不能修改操作系统的一部分。这是因为默认情况下容器只允许有限地访问设备。一个“特权”容器被赋予与启动容器的用户相同的设备访问权限,但在 systemd 模式下运行(--systemd=always)时,虚拟控制台(/dev/tty\d+)除外。
特权容器会关闭将容器与主机隔离的安全功能。丢弃的能力、受限的设备、只读挂载点、Apparmor/SELinux 隔离以及 Seccomp 过滤器都将被禁用。由于禁用了安全功能,几乎不应设置特权字段,因为容器很容易突破限制。
在用户命名空间中运行的容器(例如,无根容器)不能拥有比启动它们的用户更多的特权。
--tty, -t¶
分配一个伪 TTY。默认值为 false。
当设置为 true 时,Podman 分配一个伪 TTY 并将其附加到容器的标准输入。例如,这可以用于运行一次性交互式 shell。
注意:--tty 标志会阻止标准输出的重定向。它会合并 STDOUT 和 STDERR,可能会插入控制字符,并且可能会使管道挂起。此选项仅在终端中交互式运行时使用。向 Podman 馈送输入时,仅使用 -i,而不是 -it。
--user, -u=用户[:组]¶
设置指定命令使用的用户名或 UID,以及可选的组名或 GID。用户和组都可以是符号名称或数字。
如果没有此参数,命令将以容器镜像中指定的用户身份运行。除非被 Containerfile 中的 USER
命令或传递给此选项的值覆盖,否则此用户通常默认为 root。
当不使用用户命名空间时,容器内和主机上使用的 UID 和 GID 相匹配。然而,当使用用户命名空间时,容器内的 UID 和 GID 可能对应于主机上的另一个 UID 和 GID。例如,在无根容器中,始终使用用户命名空间,容器中的 root 默认对应于调用 Podman 的用户的 UID 和 GID。
--workdir, -w=目录¶
容器内的工作目录。
在容器内运行二进制文件的默认工作目录是根目录(/)。镜像开发者可以使用 WORKDIR 指令设置不同的默认值。操作员可以使用 -w 选项覆盖工作目录。
退出状态¶
podman exec
的退出代码提供了关于容器内命令为何无法运行或为何退出的信息。当 podman exec
以非零代码退出时,退出代码遵循 chroot
标准,详见下文
125 错误出在 Podman 本身
$ podman exec --foo ctrID /bin/sh; echo $?
Error: unknown flag: --foo
125
126 容器内命令无法调用
$ podman exec ctrID /etc; echo $?
Error: container_linux.go:346: starting container process caused "exec: \"/etc\": permission denied": OCI runtime error
126
127 容器内命令未找到
$ podman exec ctrID foo; echo $?
Error: container_linux.go:346: starting container process caused "exec: \"foo\": executable file not found in $PATH": OCI runtime error
127
退出代码 容器内命令的退出代码
$ podman exec ctrID /bin/sh -c 'exit 3'; echo $?
3
示例¶
在选定容器中执行命令,并分配 stdin 和 tty
$ podman exec -it ctrID ls
在选定容器中,使用覆盖的工作目录执行命令,并分配 stdin 和 tty
$ podman exec -it -w /tmp myCtr pwd
在选定的容器中以指定用户身份执行命令
$ podman exec --user root ctrID ls
执行命令但不附加到 exec 会话,让命令在后台运行
$ podman exec -d ctrID find /path/to/search -name yourfile
另请参阅¶
历史¶
2017 年 12 月,最初由 Brent Baude 编译bbaude@redhat.com