名称

podman-unshare - 在修改后的用户命名空间中运行命令

概要

podman unshare [选项] [命令]

描述

在新的用户命名空间中启动一个进程(默认情况下为 $SHELL)。用户命名空间被配置为使调用用户的 UID 和主 GID 分别显示为 UID 0 和 GID 0。在 /etc/subuid/etc/subgid 中与该用户和组匹配的任何范围也会在 newuidmap(1)newgidmap(1) 帮助程序的帮助下作为自身映射。

podman unshare 对于排查非特权操作和手动清除与镜像和容器相关联的存储和其他数据很有用。

它也适用于使用 podman mount 命令。如果非特权用户想要挂载和操作容器,那么他们需要执行 podman unshare。除非用户在 podman unshare 会话中运行,否则执行 podman mount 会针对非特权用户失败。

unshare 会话定义了两个环境变量

  • CONTAINERS_GRAPHROOT: 持久容器数据的路径。

  • CONTAINERS_RUNROOT: 易失性容器数据的路径。

重要:此命令在远程 Podman 客户端中不可用。

选项

--help, -h

打印使用说明

--rootless-netns

加入用于 netavark 网络的无根网络命名空间。它可用于通过 IP 地址(桥接网络)连接到无根容器。否则,这在主机网络命名空间中是不可能的。

退出代码

来自 podman unshare 的退出代码提供有关容器运行失败或退出原因的信息。当 podman unshare 命令以非零代码退出时,退出代码遵循 chroot 标准,请参见下文

125 错误在 podman 本身

$ podman unshare --foo; echo $?
Error: unknown flag: --foo
125

126 执行 包含的命令 并且 命令 无法调用

$ podman unshare /etc; echo $?
Error: fork/exec /etc: permission denied
126

127 执行 包含的命令 并且 命令 找不到

$ podman unshare foo; echo $?
Error: fork/exec /usr/bin/bogus: no such file or directory
127

退出代码 包含的命令 退出代码

$ podman unshare /bin/sh -c 'exit 3'; echo $?
3

示例

在无根用户命名空间中执行指定的命令

$ podman unshare id
uid=0(root) gid=0(root) groups=0(root),65534(nobody)

显示无根容器的用户命名空间映射

$ podman unshare cat /proc/self/uid_map /proc/self/gid_map
         0       1000          1
         1      10000      65536
         0       1000          1
         1      10000      65536

在无根容器的用户命名空间中显示无根 netns 信息

$ podman unshare --rootless-netns ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: tap0: <BROADCAST,UP,LOWER_UP> mtu 65520 qdisc fq_codel state UNKNOWN group default qlen 1000
    link/ether aa:8c:0b:73:98:f6 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.100/24 brd 10.0.2.255 scope global tap0
       valid_lft forever preferred_lft forever
    inet6 fd00::a88c:bff:fe73:98f6/64 scope global dynamic mngtmpaddr
       valid_lft 86389sec preferred_lft 14389sec
    inet6 fe80::a88c:bff:fe73:98f6/64 scope link
       valid_lft forever preferred_lft forever

另请参阅

podman(1), podman-mount(1), namespaces(7), newuidmap(1), newgidmap(1), user_namespaces(7)