NAME¶
Podman-Pod-Create-创建新Pod
SYNOPSIS¶
podman pod create [options] [name]
DESCRIPTION¶
创建一个空Pod或多个容器的单元,并为其添加容器做好准备。可以使用特定名称创建Pod。如果没有指定名称,则会生成一个随机名称。Pod ID打印为STDOUT。然后,您可以使用 podman create --pod <pod_id|pod_name>
... 将容器添加到吊舱,以及 podman pod start <pod_id|pod_name>
启动吊舱。
操作员可以通过三种方式识别Pod:uuid长标识(“f78375b1c487e03c9438c729345e54db9d20cfa2ac1fc3494b6eb60872e74778”)uuid短标识(“f78375b1c487”)名称(“jonah”)
Podman为每个Pod生成一个UUID,如果没有使用 --name 然后为它生成一个随机的字符串名称。此名称可用于标识Pod。
注:与资源限制相关的标志通过在Pod的cgroup父级中为加入Pod的所有容器显式设置限制来工作。容器可以在加入实例时覆盖资源限制。例如,如果通过以下方式创建Pod podman pod create --cpus=5 ,指定 podman container create --pod=<pod_id|pod_name>
--cpus=4 使容器使用较小的限制。此外,指定其自己的cgroup的容器,例如 --cgroupns=host ,则不会获得分配的Pod级Cgroup资源。
OPTIONS¶
--add-host = hostname[;hostname[;...]] : ip¶
将自定义主机到IP映射添加到pod的 /etc/hosts
文件.
该选项需要将一个或多个以逗号分隔的主机名映射到单个IPv4或IPv6地址,用逗号分隔。它还可用于覆盖Podman添加的主机名的IP地址 /etc/hosts
默认情况下(另请参阅 --name 和 --hostname 选项)。可以多次指定此选项以添加其他映射 /etc/hosts
.海葬有违 --no-hosts 选择和冲突 no_hosts=true 在 containers.conf
.
特殊标志而不是IP地址 host-gateway 可以给予。这将解析为容器可用于连接到主机的IP地址。选择的IP地址取决于您的网络设置,因此不能保证Podman可以确定 host-gateway 自动地址,这将导致Podman失败并显示错误消息。您可以使用覆盖此IP地址 host_containers_internal_ip 选项 containers.conf .
的 host-gateway Podman还使用地址自动添加 host.containers.internal
和 host.docker.internal
主机名 /etc/hosts
.您可以通过提供 --no-hosts 选项,或通过设置 host_containers_internal_ip="none" 在 containers.conf .如果没有 host-gateway 地址是手动配置的,并且Podman无法自动确定IP地址,Podman将悄悄跳过将这些内部主机名添加到 /etc/hosts
.如果Podman在虚拟机中运行 podman machine
(this包括Mac和Windows主机),Podman将悄悄跳过将内部主机名添加到 /etc/hosts
,除非手动配置IP地址;内部主机名由gvpro DNS解析程序解析。
波德曼将使用 /etc/hosts
默认情况下,主机的文件作为基础,即该文件中存在的任何主机名也将存在于 /etc/hosts
容器的文件。可以使用配置不同的基本文件 base_hosts_file 配置入 containers.conf
.
Pod中的所有容器都共享/etc/hosts文件。
--blkio-weight = 重量¶
数据块IO相对权重。这个 weight 是介于 10 和 1000 。
Cgroup V1无根系统不支持此选项。
--blkio-weight-device = device:weight¶
数据块IO相对设备权重。
--cgroup-parent = path¶
在其下创建Pod的cgroup的cgroup的路径。如果该路径不是绝对路径,则该路径被视为相对于初始化进程的cgroup路径。如果Cgroup尚不存在,则会创建它们。
--cpus = 金额¶
设置分配给Pod的CPU总数。默认值为0.000,表示计算能力没有限制。
--cpuset-cpus = 数¶
允许执行的CPU。可以指定为逗号分隔的列表(例如 0,1 ),作为一个范围(例如 0-3 ),或其任意组合(例如 0-3,7,11-15 )。
在某些系统上,可能不允许非超级用户更改资源限制。欲了解更多详情,请访问https://github.com/containers/podman/blob/main/troubleshooting.md#26-running-containers-with-resource-limits-fails-with-a-permissions-error
Cgroup V1无根系统不支持此选项。
--cpuset-mems = 节点¶
允许执行的内存节点(MEM)(0-3,0,1)。仅在NUMA系统上有效。
如果系统上有四个内存节点(0-3),请使用 --cpuset-mems=0,1 则容器中的进程仅使用来自前两个内存节点的内存。
在某些系统上,可能不允许非超级用户更改资源限制。欲了解更多详情,请访问https://github.com/containers/podman/blob/main/troubleshooting.md#26-running-containers-with-resource-limits-fails-with-a-permissions-error
Cgroup V1无根系统不支持此选项。
--device = host-device[:container-device][:permissions]¶
将主机设备添加到Pod。任选 permissions 参数可用于通过组合指定设备权限 r 对于阅读, w 用于写入,以及 m 为 mknod (2)。
示例: --device=/dev/sdc:/dev/xvdc:rwm 。
注意:如果 host-device 是符号链接,则首先对其进行解析。Pod只存储主机设备的主号和次号。
Podman可能会加载使用指定设备所需的内核模块。Podman在必要时加载模块的设备是:/dev/fuse。
在无根模式下,新设备从主机绑定挂载到容器中,而不是Podman在容器空间中创建它。由于绑定挂载在SELinux系统上保留其SELinux标签,因此容器在访问挂载的设备时可能会被拒绝权限。通过以下命令修改SELinux设置以允许容器使用所有设备标签:
$sudo setsebool-P CONTAINER_USE_DEVICES=真
注意:Pod通过存储用户传递的初始配置并在添加到Pod的每个容器上重新创建设备来实现设备。
--device-read-bps = path:rate¶
限制设备的读取速率(以字节/秒为单位)(例如 --device-read-bps=/dev/sda:1mb )。
在某些系统上,可能不允许非超级用户更改资源限制。欲了解更多详情,请访问https://github.com/containers/podman/blob/main/troubleshooting.md#26-running-containers-with-resource-limits-fails-with-a-permissions-error
Cgroup V1无根系统不支持此选项。
--device-write-bps = path:rate¶
限制设备的写入速率(以字节/秒为单位)(例如 --device-write-bps=/dev/sda:1mb )。
在某些系统上,可能不允许非超级用户更改资源限制。欲了解更多详情,请访问https://github.com/containers/podman/blob/main/troubleshooting.md#26-running-containers-with-resource-limits-fails-with-a-permissions-error
Cgroup V1无根系统不支持此选项。
--dns = IP地址¶
在Pod中的所有容器之间共享的/etc/analyv.conf文件中设置定制的DNS服务器。允许使用一个特殊的选项“None”,该选项禁止为Pod创建/etc/Resolv.conf。
--dns-option = 选项¶
在Pod中的所有容器之间共享的/etc/Resolv.conf文件中设置定制的DNS选项。
--dns-search = 域¶
在Pod中的所有容器之间共享的/etc/Resolv.conf文件中设置自定义的DNS搜索域。
--exit-policy = 继续 | stop¶
设置实例在最后一个容器退出时的退出策略。支持的策略包括:
退出策略 |
描述 |
---|---|
继续 |
当最后一个容器退出时,吊舱通过保持其下层容器活着来继续运行。默认情况下使用。 |
stop |
当最后一个容器退出时,吊舱(包括其下部容器)停止。用于 |
--gidmap = pod_gid:host_gid:amount¶
用户命名空间的GID映射。使用此标志运行Pod中的所有容器,同时启用用户命名空间。它与 --userns 和 --subgidname 旗帜。
--gpus = ENTRY¶
要添加到容器中的GPU设备(‘ALL’可传递所有GPU)当前仅支持NVIDIA设备。
--help , -h¶
打印用法报表。
--hostname = name¶
在所有容器内设置pod的主机名。
给定的主机名也会添加到 /etc/hosts
使用容器的主IP地址(另请参阅 --add-host 选项)。
--hosts-file = path | none | image¶
用于创建 /etc/hosts
容器内的文件。这必须是主机系统上某个文件的绝对路径,或者是以下特殊标志之一: "" 遵循 base_hosts_file
配置 containers.conf (the默认) none
不要使用基本文件(即从空文件开始) image
使用容器图像的 /etc/hosts
文件作为基文件
--infra¶
创建一个基础设施容器并将其与Pod相关联。基础设施容器是一个轻量级容器,用于协调Pod的共享内核命名空间。默认值:True。
--infra-command = 命令¶
运行以启动INFRA容器的命令。默认:“/PAUSE”。
--infra-conmon-pidfile = file¶
写入inra容器的 召唤 进程转换为文件。AS 召唤 在与Podman不同的进程中运行,这在使用system d管理Podman容器和Pod时是必需的。
--infra-image = 图像¶
用于INFRA容器的自定义图像。除非指定,否则Podman会构建一个定制的本地映像,而不需要删除映像。
--infra-name = name¶
用于Pod的基础设施容器的名称。
--ip = ipv4¶
为Pod指定静态IPv4地址,例如 10.88.64.128 。仅当POD仅加入到单个网络时才能使用该选项--即, --network=network-name 最多使用一次-如果Pod没有通过以下方式加入另一个容器的网络命名空间 --network=container:id 。地址必须在网络的IP地址池内(默认 10.88.0.0/16 )。
要为每个Pod指定多个静态IP地址,请使用 --network 选项,为每个选项指定一个静态IP地址 ip
该选项的模式。
--ip6 = ipv6¶
为Pod指定静态IPv6地址,例如 FD46:DB93:AA76:AC37::10 。仅当POD仅加入到单个网络时才能使用该选项--即, --network=network-name 最多使用一次-如果Pod没有通过以下方式加入另一个容器的网络命名空间 --network=container:id 。该地址必须在网络的IPv6地址池内。
要为每个Pod指定多个静态IPv6地址,请使用 --network 选项,为每个选项指定一个静态IPv6地址 ip6
该选项的模式。
--label , -l = key=value¶
将元数据添加到Pod。
--label-file = file¶
读入以行分隔的标签文件。
--mac-address = 地址¶
Pod网络接口MAC地址(例如92:D0:C6:0A:29:33)仅当Pod仅加入单个网络时才能使用此选项-即, --network=network-name 最多使用一次-如果Pod没有通过以下方式加入另一个容器的网络命名空间 --network=container:id 。
请记住,以太网络中的MAC地址必须唯一。根据RFC4862,IPv6本地链路地址基于设备的MAC地址。
要为每个Pod指定多个静态MAC地址,请使用 --network 选项,为每个选项指定静态MAC地址 mac
该选项的模式。
--memory , -m = number[unit]¶
内存限制。一个 unit 可 b (字节), k (千比字节), m (兆字节),或 g (千兆字节)。
允许限制容器可用的内存。如果主机支持交换内存,则 -m 内存设置可以大于物理RAM。如果指定限制为0(不使用 -m ),容器的内存不受限制。实际限制可能四舍五入为操作系统页面大小的倍数(该值非常大,即数百万万亿)。
Cgroup V1无根系统不支持此选项。
--memory-swap = number[unit]¶
一个等于内存加交换空间的限制值。一个 unit 可 b (字节), k (千比字节), m (兆字节),或 g (千兆字节)。
必须与 -m ( --memory )旗帜。参数值必须大于 -m ( --memory )默认情况下,它被设置为值的两倍 --memory 。
设置 number 至 -1 以启用无限制交换。
Cgroup V1无根系统不支持此选项。
--name , -n = name¶
为Pod指定一个名称。
--network = mode , --net¶
设置Pod的网络模式。
有效 mode 值包括:
[bridge[:OPTIONS,...]] :在默认网桥上创建网络堆栈。这是Rootful Containers的默认设置。可以指定以下附加选项:
alias= 名称:添加容器的网络范围别名。
ip= IPv4:为此容器指定静态IPv4地址。
ip6= IPv6:为此容器指定静态IPv6地址。
mac= MAC:为此容器指定静态MAC地址。
interface_name= 名称:为容器内创建的网络接口指定名称。
host_interface_name= 名称:为容器外部创建的网络接口指定名称。
任何其他选项都将未经验证而传递给netavark。这对于将参数传递给netavark插件可能很有用。
例如,要设置静态IPv4地址和静态mac地址,请使用
--network bridge:ip=10.88.0.10,mac=44:33:22:11:00:99
。<网络名称或ID> [:OPTIONS,...] :连接到用户定义的网络;这是由创建的网络的网络名称或ID podman network create .可以指定与上述桥模式下描述的相同选项。使用 --network 多次选项以指定其他网络。\为了向后兼容性,还可以在第一个上指定逗号分隔的网络 --network 参数,但这会阻止您使用上面桥梁部分下描述的选项。
none :为容器创建网络命名空间,但不为其配置网络接口,因此容器没有网络连接。
容器: id:重用另一个容器的网络堆栈。
host :不要创建网络命名空间,容器使用主机的网络。注意:主机模式允许容器完全访问本地系统服务,如D-BUS,因此被认为是不安全的。
ns: Path:要加入的网络命名空间的路径。
private :为容器创建新的命名空间。这使用了 bridge Rootful Containers和 slirp4netns 对于没有根基的人。
slirp4netns[:OPTIONS,...] :使用 slirp4netns (1)创建用户网络堆栈。可以指定这些附加选项,也可以设置为
network_cmd_options
in containers. inf:allow_host_loopback=true|false :允许illrp4netns到达主机环回IP(默认为10.0.2.2或更改后的illrp4netns CIDR子网中的第二个IP,请参阅下面的CIDR选项)。默认值为FALSE。
mtu= TU:指定要用于此网络的RTI。(默认为
65520
).cidr= CIDR:指定此网络使用的ip范围。(默认为
10.0.2.0/24
).enable_ipv6=true|false :启用IPv6。默认值为True。(需要
outbound_addr6
)。outbound_addr= INTERFACE:指定sirp绑定到的传出接口(仅限ipv4流量)。
outbound_addr= IPv4:指定slirp绑定的传出ipv4地址。
outbound_addr6= INTERFACE:指定sirp绑定到的传出接口(仅限ipv6流量)。
outbound_addr6= IPv6:指定slirp绑定的传出ipv6地址。
port_handler=rootlesskit :使用rootlessKit进行端口转发。Default. \注意:RootlessKit通常会将进入数据包的源IP地址更改为容器网络命名空间中的IP地址
10.0.2.100
.如果应用程序需要真正的源IP地址,例如Web服务器日志,请使用sirp4netns端口处理程序。rootlessKit端口处理程序也用于连接到用户定义网络时的无根容器。port_handler=slirp4netns :使用glirp4netns端口转发,它比rootless kit慢,但保留了正确的源IP地址。此端口处理程序不能用于用户定义的网络。
pasta[:OPTIONS,...]: use pasta(1) to create a user-mode networking stack.
This is the default for rootless containers and only supported in rootless mode.
By default, IPv4 and IPv6 addresses and routes, as well as the pod interface name, are copied from the host. Port forwarding preserves the original source IP address. Options described in pasta(1) can be specified as comma-separated arguments.
In terms of pasta(1) options, --config-net is given by default, in order to configure networking when the container is started, and --no-map-gw is also assumed by default, to avoid direct access from container to host using the gateway address. The latter can be overridden by passing --map-gw in the pasta-specific options (despite not being an actual pasta(1) option).
For better integration with DNS handling, --dns-forward 169.254.1.1 is passed, and this address is added to resolv.conf(5) as first resolver. It is possible to pass --dns-forward explicitly in case a different IP address should be used. To make thehost.containers.internal
/etc/hosts entry work and allow connections to the host, --map-guest-addr 169.254.1.2 is passed. Again, it can be set explicitly to choose a different IP address.
Also, -t none and -u none are passed if, respectively, no TCP or UDP port forwarding from host to container is configured (via Podman's --publish or by passing the pasta -t/-u options directly), to disable automatic port forwarding based on bound ports. Similarly, -T none and -U none are given to disable the same functionality from container to host.
All options can also be set in containers.conf(5); see thepasta_options
key under the network section in that file.
Some examples:pasta:--map-gw :允许容器使用网关地址直接到达主机。
pasta:--mtu,1500 :指定1500字节的MTU作为 tap 容器中的接口。
pasta:--ipv4-only,-a,10.0.2.0,-n,24,-g,10.0.2.2,--dns-forward,10.0.2.3,-m,1500,--no-ndp,--no-dhcpv6,--no-dhcp ,相当于默认的glirp4netns(1)选项:禁用IPv6、分配
10.0.2.0/24
发送到tap0
容器内接口,带网关10.0.2.3
,启用可在以下位置访问的DNS转发器10.0.2.3
,将MTU设置为1500字节,禁用NDP、DHCPv6和DHCP支持。pasta:-I,tap0,--ipv4-only,-a,10.0.2.0,-n,24,-g,10.0.2.2,--dns-forward,10.0.2.3,--no-ndp,--no-dhcpv6,--no-dhcp ,相当于默认的glirp4netns(1)带有Podman覆盖的选项:与上面相同,但将mtu保留为65520字节
pasta:-t,auto,-u,auto,-T,auto,-U,auto :启用基于从主机和容器端观察到的绑定端口的自动端口转发
pasta:-T,5201 :启用从容器到主机的TCP端口5201转发,使用环回接口而不是TAP接口以提高性能
如果使用则无效 --dns , --dns-option ,或 --dns-search 使用 --network 设置为 none 或 container:id.
--network-alias = 别名¶
为Pod添加网络范围的别名,为容器加入的所有网络设置别名。要仅为特定网络设置名称,请使用别名选项,如中所述 --network 选择。如果网络启用了DNS (podman network inspect -f {{.DNSEnabled}} <name>
),这些别名可用于给定网络上的名称解析。可以多次指定此选项。注意:使用CNI时,Pod只能访问其加入的第一个网络上的别名。Netavark/aardvark-dns不存在此限制。
--no-hostname¶
不创建 /etc/hostname 文件放入容器中。
默认情况下,Podman管理 /etc/hostname 文件,添加容器自己的主机名。 当 --no-hostname 选项已设置,图像的 /etc/hostname 如果存在,将不加修改地保留。
--no-hosts¶
不要修改 /etc/hosts
pod中的文件。
Podman控制了吊舱的 /etc/hosts
默认情况下,文件并添加容器名称的条目(请参阅 --name 选项)和主机名(请参阅 --hostname 选项)、内部 host.containers.internal
和 host.docker.internal
主机,以及使用添加的任何主机名 --add-host 选项.参阅 --add-host 详细信息选项。通过 --no-hosts 禁用此功能,以便图像 /etc/hosts
文件保持未修改。通过设置,全球范围内也可以实现同样的目标 no_hosts=true 在 containers.conf
.
此选项与 --add-host 。
--pid = pid¶
设置吊舱的PID模式。默认情况下,为Pod创建私有的PID命名空间。需要通过--Share共享PID命名空间。
host: use the host’s PID namespace for the pod
ns: join the specified PID namespace
private: create a new namespace for the pod (default)
--pod-id-file = path¶
将Pod ID写入文件。
--publish , -p = [[ip:][hostPort]:]containerPort[/protocol]¶
将此Pod内的容器端口或端口范围发布到主机。
两者都有 hostPort 和 containerPort 可以指定为端口范围。为这两个范围指定范围时,范围内的集装箱端口数必须与范围内的主机端口数匹配。
如果主机IP设置为0.0.0.0或根本未设置,则该端口绑定在主机上的所有IP上。
默认情况下,Podman发布TCP端口。若要改为发布UDP端口,请指定 udp
作为协议。要同时发布TCP和UDP端口,请设置 --publish
两次,带 tcp
,以及 udp
分别作为协议。Rootful容器还可以使用 sctp
协议。
不必指定主机端口(例如 podman run -p 127.0.0.1::80
)。如果不是,则随机为该集装箱端口分配主机上的一个端口。
使用 podman port 要查看实际映射,请执行以下操作: podman port $CONTAINER $CONTAINERPORT
。
请注意,网络驱动程序 macvlan
和 ipvlan
不支持端口转发,因此此选项对此类网络没有影响。
Note: 您不能单独发布Pod中的集装箱端口,而只能按Pod本身发布。
Note: 一旦创建Pod,就不能再修改它。
--replace¶
如果已存在具有相同名称的另一个Pod,请将其替换并移除。缺省值为 false 。
--restart = 政策¶
重新启动策略以在容器退出时遵循。重新启动策略不会生效,如果通过 podman kill 或 podman stop 命令。
有效 policy 值包括:
no
:退出时不重新启动容器never
:同义词 no ;退出时不重新启动容器on-failure[:max_retries]
:当容器以非零退出代码退出时重新启动容器,无限期重试或直到可选的 max_retries 命中计数always
:容器退出时重新启动,无论状态如何,无限期重试unless-stopped
:等同于 始终
Podman提供了一个系统单元文件podman-restart.service,它在系统重新启动后重新启动Containers。
在系统d服务中运行容器时,请使用系统d提供的重启功能。换句话说,不要在容器单位中使用此选项,而是将 Restart=
中的系统ID指令 [Service]
一节。看见 podman-systemd.unit (5)及 systemd.service (5)。
Pod中所有容器的默认重启策略。
--security-opt = 选项¶
安全选项
apparmor=unconfined :关闭Pod的指示器限制
apparmor =Alternate-Profile:设置Pod的设备限制配置文件
label=user: USER:为实例进程设置标签USER
label=role: Role:设置Pod进程的标签角色
label=type: type:设置实例进程的标签进程类型
label=level: Level:设置实例进程的标签级别
label=filetype: type:设置Pod文件的标签文件类型
label=disable :关闭Pod的标签分离
Note: Labeling can be disabled for all pods/containers by setting label=false in the containers.conf (/etc/containers/containers.conf
or $HOME/.config/containers/containers.conf
) file.
label=nested :允许在容器内修改SELinux。只要SELinux策略允许,容器就可以修改文件和进程上的SELinux标签。如果没有 nested ,Containers会将SELinux视为已禁用,即使在主机上启用了SELinux。禁止容器设置任何标签。
mask =/Path/1:/Path/2:要屏蔽的路径用冒号分隔。在Pod内的容器内无法访问被屏蔽的路径。
no-new-privileges :禁止容器进程通过
execve(2)
系统调用(例如通过setuid或setgid位,或通过文件功能)。依赖于在其可执行文件上设置的setuid/setgid位来更改用户ID或组ID的程序不再能够这样做,并且任何文件功能都添加到可执行文件中(例如通过setcap
)不会添加到允许的能力集中。有关更多详细信息,请参阅:https://docs.kernel.org/userspace-api/no_new_privs.html。seccomp=unconfined :关闭Pod的seccomp限制。
seccomp=profile.json :要用作seccomp过滤器的JSON文件。请注意,
io.podman.annotations.seccomp
使用指定值设置批注,如中所示podman inspect
。proc-opts =Options:用于/proc挂载的选项的逗号分隔列表。有关可能的装载选项的更多详细信息,请参阅 过程(5) 手册页。
unmask =_全部_或 /path/1:/path/2, 或Shell展开的路径(/proc/ *): Paths to unmask separated by a colon. If set to * ALL *, it unmasks all the paths that are masked or made read-only by default. The default masked paths are * /proc/acpi, /proc/kcore, /proc/keys, /proc/latency_stats, /proc/sched_debug, /proc/scsi, /proc/timer_list, /proc/timer_stats, /sys/firmware, and /sys/fs/selinux *, * /sys/devices/virtual/powercap *. The default paths that are read-only are * /proc/asound *, * /proc/bus *, * /proc/fs *, * /proc/irq *, * /proc/sys *, * /proc/sysrq-trigger *, * /sys/fs/cgroup *。
注意:可以通过设置为所有容器禁用标签 label=false 在 containers.conf (5)归档。
--shm-size = number[unit]¶
大小 /dev/shm. A unit 可 b (字节), k (千比字节), m (兆字节),或 g (千兆字节)。如果省略单位,则系统使用字节。如果省略大小,则默认为 64m 。什么时候 size 是 0 ,Pod为IPC使用的内存量没有限制。此选项与 --ipc=host 。
--shm-size-systemd = number[unit]¶
特定于system d的tmpf挂载的大小,例如/run、/run/lock、/var/log/Journal和/tmp。一个 unit 可 b (字节), k (千比字节), m (兆字节),或 g (千兆字节)。如果省略单位,则系统使用字节。如果省略大小,则默认为 64m 。什么时候 size 是 0 ,使用量被限制为主机可用内存的50%。
--subgidname = name¶
使用映射在新的用户命名空间中运行容器 name 在 /etc/subgid 文件。如果运行无根用户,则用户需要具有使用映射的权限。看见 subgid (5)。此标志与 --userns 和 --gidmap 。
--subuidname = name¶
使用映射在新的用户命名空间中运行容器 name 在 /etc/subuid 文件。如果运行无根用户,则用户需要具有使用映射的权限。看见 subuid (5)。此标志与 --userns 和 --uidmap 。
--sysctl = name=value¶
为Pod中的所有容器配置命名空间内核参数。
对于IPC命名空间,允许使用以下sysctls:
kernel.msgmax
kernel.msgmnb
kernel.msgmni
kernel.sem
kernel.shmall
kernel.shmmax
kernel.shmmni
kernel.shm_rmid_forced
以fs.mQueue开头的系统。*
注意:如果Pod内没有共享IPC命名空间,则不允许使用上述sysctls。
对于网络命名空间,只允许使用以NET.*开头的sysctls。
注意:如果Pod内部没有共享网络命名空间,则不允许使用上述sysctls。
--uidmap = container_uid:from_uid:amount¶
使用提供的映射在新的用户命名空间中运行Pod中的所有容器。此选项与 --userns 和 --subuidname 选择。此选项提供将主机UID映射到容器UID的方法。它可以多次传递以映射不同的范围。
--userns = mode¶
为Pod中的所有容器设置用户命名空间模式。它缺省为 PODMAN_USERNS
环境变量。空值(“”)表示禁用用户命名空间。
无根用户--userns=键映射:
钥匙 |
主机用户 |
容器用户 |
---|---|---|
“” |
$UID |
0(默认用户帐户映射到容器中的根用户。) |
主机 |
$UID |
0(默认用户帐户映射到容器中的根用户。) |
保持ID |
$UID |
$UID(将用户帐户映射到容器内的相同UID。) |
自动 |
$UID |
NIL(主机用户UID未映射到容器。) |
Nommap |
$UID |
NIL(主机用户UID未映射到容器。) |
有效 mode 值包括:
自动[: OPTIONS,... ] :自动创建命名空间。可以将这些选项指定为
auto
:gidmapping= _CONTAINER_GID:HOST_GID:SIZE_强制在用户命名空间中存在GID映射。
size= 例如:
--userns=auto:size=8192
。如果size
未指定,auto
估计用户命名空间的大小。uidmapping= _CONTAINER_UID:HOST_UID:SIZE_强制在用户命名空间中存在UID映射。
host :在调用方的用户命名空间中运行。容器中运行的进程与调用用户启动的任何其他进程在主机上具有相同的权限(默认)。
keep-id :创建一个用户命名空间,其中将当前无根用户的UID:GID映射到容器中的相同值。根用户创建的容器不允许使用此选项。
nomap :创建一个用户命名空间,其中当前无根用户的UID:GID未映射到容器中。根用户创建的容器不允许使用此选项。
--uts = mode¶
设置Pod的UTS命名空间模式。支持下列值:
host :在Pod内使用主机的UTS命名空间。
private :为Pod创建新的命名空间(默认)。
ns:[path] :在给定的现有UTS命名空间中运行Pod。
--volume , -v = [[SOURCE-VOLUME|HOST-DIR:]CONTAINER-DIR[:OPTIONS]]¶
创建绑定装载。如果 -v /HOST-DIR:/CONTAINER-DIR
,则Podman绑定挂载 /HOST-DIR
从主机进入 /CONTAINER-DIR
在波德曼集装箱里。同样, -v SOURCE-VOLUME:/CONTAINER-DIR
将命名卷从主机装载到容器中。如果不存在这样的命名卷,Podman会创建一个。如果未给出源,则该卷将创建为具有随机生成名称的匿名命名卷,并在通过删除Pod时删除 --rm
旗帜或 podman rm --volumes
指挥部。
(注意,当使用远程客户端时,包括Mac和Windows(不包括WSL2)计算机,卷从远程服务器挂载,而不一定是客户端计算机。)
这个 OPTIONS 是逗号分隔的列表,可以是以下一项或多项:
rw | ro
z | Z
[O]
[U]
[no] copy
[no] dev
[no] exec
[no] suid
[r] bind
[r] shared | [r] slave | [r] private [r] unbindable [1]
idmap [=options]
这个 CONTAINER-DIR
必须是绝对路径,如 /src/docs
。该卷将挂载到容器中的该目录下。
如果指定了卷源,则它必须是主机上的路径或命名卷的名称。主机路径可以是绝对路径或相对路径;相对路径是相对于运行Podman的目录进行解析的。如果源不存在,Podman将返回错误。用户必须预先创建源文件或目录。
任何不是以 .
或 /
被视为命名卷的名称。如果不存在具有该名称的卷,则会创建该卷。使用名称创建的卷不是匿名的,它们不会被 --rm
选项和 podman rm --volumes
指挥部。
指定多个 -v 用于将一个或多个卷装载到Pod中的选项。
Write Protected Volume Mounts
增列 :ro 或 :rw 分别以只读或读写模式装入卷的选项。默认情况下,卷以读写方式装载。请参见示例。
Chowning Volume Mounts
默认情况下,Podman不会更改装载到容器中的源卷目录的所有者和组。如果在新的用户命名空间中创建Pod,则容器中的UID和GID可能对应于主机上的另一个UID和GID。
这个 :U
Suffix告诉Podman根据Pod中的UID和GID使用正确的主机UID和GID,以递归方式更改源卷的所有者和组。Chowning遍历卷下的文件系统并更改每个文件的UID/GID。如果卷具有数千个inode,则此过程需要很长时间,从而延迟Pod的启动。
Warning 请谨慎使用,因为这会修改主机文件系统。
Labeling Volume Mounts
像SELinux这样的标签系统要求在安装到Pod中的卷内容上放置适当的标签。如果没有标签,安全系统可能会阻止在Pod内运行的进程使用内容。默认情况下,Podman不会更改操作系统设置的标签。
要更改pod上下文中的标签,请添加两个后缀之一 :z 或 :Z 到卷装载。这些后缀告诉Podman重新标记共享卷上的文件对象。的 z 选项告诉Podman两个或更多pod共享卷内容。因此,Podman使用共享内容标签标记内容。共享卷标签允许所有容器读/写内容。的 Z 选项告诉Podman使用私人非共享标签来标记内容。只有当前pod可以使用专用卷。
注:所有集装箱在 pod
共享相同的SELinux标签。这意味着所述Pod中的所有容器都可以读取/写入共享到用 :Z
在任何一个容器上。重新标记遍历卷下的文件系统,并更改每个文件上的标签;如果卷有数千个inode,此过程将花费很长时间,从而延迟pod的启动。如果该卷之前已重新标记为 z
选项,Podman已优化为不会第二次重新贴标签。如果文件被移动到卷中,则可以使用手动更改标签 chcon -Rt container_file_t PATH
命令
注:请勿重新标记系统文件和目录。重新标记系统内容可能会导致计算机上的其他受限服务失败。对于这些类型的容器,我们建议禁用SELinux分离。该选项 --security-opt label=disable 禁用Pod的SELinux分离。例如,如果用户想要将其整个主目录卷装载到Pod中,他们需要禁用SELinux分离。
$ podman pod create --security-opt label=disable -v $HOME:/home/user fedora touch /home/user/file
Overlay Volume Mounts
这个 :O
标志告诉Podman从主机挂载目录作为临时存储,使用 overlay file system
。POD进程可以修改装载点内的内容,该装载点存储在容器存储中的单独目录中。在重叠术语中,源目录位于较低位置,容器存储目录位于较高位置。当Pod完成执行时,会销毁对挂载点的修改,这与卸载tmpfs挂载点类似。
对于高级用户, overlay 选项还支持自定义非易失性 upperdir 和 workdir 用于覆盖坐骑。自定义 upperdir 和 workdir 可以完全由用户自己管理,Podman不会在生命周期完成时将其删除。示例 :O,upperdir=/some/upper,workdir=/some/work
容器的后续执行会看到原始的源目录内容,与之前的Pod执行相比,任何更改都不再存在。
覆盖挂载的一个用例是将包缓存从主机共享到容器中,以加快构建速度。
注: O
标志与上面列出的其他选项冲突。
装载到容器中的内容被贴上私有标签。在SELinux系统上,源目录中的标签必须可由Pod下容器标签读取。通常,容器可以读取/执行 container_share_t
并且可以读/写 container_file_t
。如果无法更改源卷上的标签,则必须禁用SELinux容器分离,Pod或基础容器才能工作。
请勿修改使用覆盖挂载装载到Pod中的源目录,这可能会导致意外故障。只有在容器运行完毕后才能修改目录。
Mounts propagation
默认情况下,绑定装载的卷是 private
。这意味着在Pod内完成的任何挂载在主机上不可见,反之亦然。可以通过指定卷装载传播属性来更改此行为。当一个卷是 shared
,则在Pod内的该卷下完成的装载在主机上可见,反之亦然。制作一本书 slave [[1] ](#footnote 1)仅启用单向挂载传播:在该卷下的主机上完成的挂载在容器内可见,但反过来则不可见。
要控制卷的装载传播属性,可以使用 [r] 共享 , [r] 奴隶 , [r] 私人 或者 [r] 不可绑定 传播标志。只能为绑定装载的卷指定传播属性,而不能为内部卷或命名卷指定传播属性。要使挂载传播工作,源挂载点(挂载源目录所在的挂载点)必须具有正确的传播属性。对于共享卷,源装载点必须是共享的。对于从卷,源装载点必须是共享的或从属的。 [1]
要递归地将卷及其所有子装载装载到Pod中,请使用 rbind 选择。默认情况下,使用绑定选项,源目录的子挂载不会挂载到Pod中。
使用以下命令装载卷 copy 选项告诉podman将内容从底层目标目录复制到新创建的内部卷。这个 copy 仅在最初创建卷时发生。随后在不同容器上使用该卷时,不会复制内容。这个 copy 选项在绑定装载上被忽略,并且不起作用。
使用装载卷 nosuid 选项意味着卷上的SUID可执行文件不能被应用程序用来更改其权限。默认情况下,使用装载卷 nosuid 。
使用装载卷 noexec 选项意味着卷上的任何可执行文件都不能在Pod中执行。
使用装载卷 nodev 选项意味着卷上的任何设备都不能被Pod内的进程使用。默认情况下,使用装载卷 nodev 。
如果 HOST-DIR 是一个挂载点,那么 dev , suid ,以及 exec 内核会忽略选项。
使用 df HOST-DIR 要确定源装载,请使用 findmnt -o TARGET,PROPAGATION source-mount-dir 以确定源装载的传播属性。如果 findmnt (1)应用工具不可用,则可以在中查看源装载点的装载条目 /proc/self/mountinfo. 查看“可选字段”,查看是否指定了任何传播属性。在那里, shared:N 意味着装载是共享的, master:N 意味着装载是从属的,如果那里没有任何东西,则装载是私有的。 [1]
若要更改装入点的传播属性,请使用 mount (8)指挥。例如,如果要绑定装载源目录 /foo, 一个人可以做到 mount --bind /foo /foo 和 mount --make-private --make-shared /foo 。这会将/foo转换为共享挂载点。或者,可以直接更改源装载的传播属性。说 / 是否为的源装载 /foo, 然后使用 mount --make-shared / 要转换 / 到共享装载中。
注意:如果用户只有通过组的访问权限,则从无根实例内部访问卷将失败。
Idmapped mount
如果 idmap
,则创建到容器中目标用户命名空间的idmap挂载。Idmap选项支持与容器使用的用户命名空间不同的自定义映射。可以在idmap选项后面指定映射,如下所示: idmap=uids=0-1-10#10-11-10;gids=0-100-10
。对于每个三元组,第一个值是映射到主机上第二个值的备份文件系统ID的开始。此映射的长度在第三个值中给出。多个范围用#分隔。
--volumes-from = CONTAINER[:OPTIONS]¶
从指定的容器装载卷。用于在容器和吊舱之间共享体积。这个 选项 是一个逗号分隔的列表,其中包含以下可用元素:
rw | ro
z
将已装载的卷从源容器装载到另一个Pod。 CONTAINER 可以是名称或ID。要共享卷,请在运行目标容器时使用--卷-From选项。即使源容器未运行,也可以共享卷。
默认情况下,Podman以与在源容器中装载卷相同的模式(读写或只读)装载卷。这可以通过添加一个 ro
或 rw
option.
像SELinux这样的标签系统要求在安装到Pod中的卷内容上放置适当的标签。如果没有标签,安全系统可能会阻止容器内运行的进程使用内容。默认情况下,Podman不会更改操作系统设置的标签。
要更改Pod上下文中的标签,请添加 z
到卷装载。这个后缀告诉Podman重新标记共享卷上的文件对象。这个 z
选项告诉Podman两个实体共享卷内容。因此,Podman使用共享内容标签来标记内容。共享卷标允许所有容器读/写内容。
如果源容器中卷的位置与驻留在目标Pod上的数据重叠,则该卷会将该数据隐藏在目标上。
EXAMPLES¶
创建命名Pod。
$ podman pod create --name test
创建命名Pod。
$ podman pod create mypod
创建一个没有基础设施容器的吊舱。
$ podman pod create --infra=false
使用下面的容器命令创建要运行的命名Pod。
$ podman pod create --infra-command /top toppod
使用主机上发布的端口创建Pod。
$ podman pod create --publish 8443:443
使用指定的网络配置创建Pod。
$ podman pod create --network slirp4netns:outbound_addr=127.0.0.1,allow_host_loopback=true
创建具有指定网络的Pod。
$ podman pod create --network pasta
在两个网络上创建Pod。
$ podman pod create --network net1:ip=10.89.1.5 --network net2:ip=10.89.10.10
另请参阅¶
podman(1) , podman-pod(1) , podman-kube-play(1) , containers.conf(1) , cgroups(7)
故障排除¶
看到 [podman-troubleshooting(7)] (https://github.com/containers/podman/blob/main/outloting.MD)获取常见问题的解决方案。
HISTORY¶
2018年7月,最初由Peter HuntpeHunt@redhat.com汇编
FOOTNOTES¶
<a name=“Footnote 1”>1:Podman项目致力于包容性,这是开源的核心价值。这个 master
和 slave
这里使用的装载传播术语有问题且容易引起分歧,需要更改。然而,这些术语目前在Linux内核中使用,目前必须按原样使用。当内核维护人员纠正这种用法时,Podman会立即效仿。