NAME

Podman-创建-创建新容器

SYNOPSIS

podman create [options] image [command [arg ...]]

podman container create [options] image [command [arg ...]]

DESCRIPTION

Creates a writable container layer over the specified image and prepares it for running the specified command. The container ID is then printed to STDOUT. This is similar to podman run -d except the container is never started. Use the podman start container command to start the container at any point.

使用 podman create 创建的容器的初始状态是“创造的”。

标志的默认设置在中定义 containers.conf 。远程连接的大多数设置都使用服务器的tainers.conf,手册页中记录的情况除外。

IMAGE

使用TRANSPORT:PATH格式指定图像。如果未指定传输,则 docker (容器注册表)默认使用传输。对于远程Podman,包括Mac和Windows(不包括WSL2)计算机, docker 是唯一允许的交通工具。

dir: _PATH_现有本地目录 path 将清单、层和签名存储为单独的文件。这是一种非标准化格式,主要用于调试或非侵入性容器检查。

$ podman save --format docker-dir fedora -o /tmp/fedora
$ podman create dir:/tmp/fedora echo hello

docker:// docker-ference(默认)存储在远程容器镜像注册表中的镜像引用。例如:“quay.io/podman/STRATE:LATE”。该引用可以包括指向特定注册表的路径;如果没有,则查询Registries.conf中列出的注册表以查找匹配的图像。默认情况下,来自 podman login (默认情况下存储在$XDG_Runtime_DIR/Containers/Auth.json中)用于身份验证;否则,它将退回到使用$HOME/.docker/config.json中的凭据。

$ podman create registry.fedoraproject.org/fedora:latest echo hello

docker-archive: path [:docker-reference] 中存储的图像 docker save 格式化的文件。 docker-reference 仅在创建此类文件时使用,并且不能包含摘要。

$ podman save --format docker-archive fedora -o /tmp/fedora
$ podman create docker-archive:/tmp/fedora echo hello

docker-daemon: _docker-引用_中的图像 docker-reference 存储在停靠器守护程序内部存储器中的格式。这个 docker-reference 也可以是镜像ID(docker-daemon:algo:digest)。

$ sudo docker pull fedora
$ sudo podman create docker-daemon:docker.io/library/fedora echo hello

oci-archive: path : _tag_目录中符合指定位置的“Open Container Image Layout Specification”的图像 path 并使用 tag.

$ podman save --format oci-archive fedora -o /tmp/fedora
$ podman create oci-archive:/tmp/fedora echo hello

OPTIONS

--add-host = host:ip

添加自定义主机到IP的映射(主机:IP)

在/etc/hosts中添加一行。格式为主机名:IP。这个 --add-host 选项可以多次设置。与 --no-hosts 选择。

--annotation = key=value

向容器中添加批注。此选项可以多次设置。

--arch = ARCH

覆盖要拉取的映像的体系结构,默认为主机。例如, arm 。除非被覆盖,否则对本地存储中相同映像的后续查找将与此体系结构匹配,而与主机无关。

--attach-a = stdin | stdout | stderr

附着到STDIN、STDOUT或STDERR。

在前台模式下(默认情况下 -d 未指定), podman run 可以在容器中启动进程,并将控制台附加到进程的标准输入、输出和错误。它甚至可以伪装成TTY(这是大多数命令行可执行文件所期望的)并传递信号。这个 -a 选项可以设置为以下各项 stdinstdout ,以及 stderr

--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

--blkio-weight = 重量

数据块IO相对权重。这个 weight 是介于 101000

Cgroup V1无根系统不支持此选项。

--blkio-weight-device = device:weight

数据块IO相对设备权重。

--cap-add = 能力

添加Linux功能。

--cap-drop = 能力

放弃Linux功能。

--cgroup-conf = KEY=VALUE

在cgroup v2上运行时,请指定要写入的cgroup文件及其值。例如 --cgroup-conf=memory.high=1073741824 将内存上限设置为1 GB。

--cgroup-parent = path

在其下创建容器的cgroup的cgroup的路径。如果该路径不是绝对路径,则该路径被视为相对于初始化进程的cgroup路径。如果Cgroup尚不存在,则会创建它们。

--cgroupns = mode

设置容器的cgroup命名空间模式。

  • host :在容器内使用主机的cgroup命名空间。

  • 容器: id:加入指定容器的命名空间。

  • 私人 :创建新的cgroup命名空间。

  • ns: PATH:在指定路径下加入命名空间。

如果主机使用cgroup v1,则缺省值设置为 host 。在cgroup v2上,缺省值为 私人

--cgroups = how

确定容器是否创建CGGroup。

默认值为 已启用

这个 enabled 选项在cgroup-parent下创建一个新的cgroup。这个 disabled 选项强制容器不创建CGgroup,因此与cgroup选项( --cgroupns--cgroup-parent )。这个 no-conmon 选项仅禁用新的cgroup conmon 进程。这个 split 选项将当前cgroup拆分为两个子cgroup:一个用于conmon,一个用于容器有效负载。无法设置 --cgroup-parent 使用 split

--chrootdirs = path

容器内的目录的路径,该目录被视为 chroot 目录。挂载到根目录中的任何Podman管理的文件(例如,/etc/Resolv.conf、/etc/hosts等/host name)也会挂载到该位置。多个目录之间用逗号分隔。

--cidfile = file

将容器ID写入 file 。文件随容器一起删除,除非与podman一起使用--在分离的容器上远程运行。

--conmon-pidfile = file

写下 召唤 进程转换为文件。AS 召唤 在与Podman不同的进程中运行,这在使用system d重新启动Podman容器时是必需的。(此选项不适用于远程Podman客户端,包括Mac和Windows(不包括WSL2)计算机)

--cpu-period = 限制

设置完全公平调度程序(CFS)的CPU周期,它是以微秒为单位的持续时间。一旦容器的CPU配额用完,它将不会被调度运行,直到当前周期结束。默认为100000微秒。

在某些系统上,可能不允许非超级用户更改资源限制。欲了解更多详情,请访问https://github.com/containers/podman/blob/main/troubleshooting.md#26-running-containers-with-resource-limits-fails-with-a-permissions-error

Cgroup V1无根系统不支持此选项。

--cpu-quota = 限制

限制CPU完全公平调度器(CFS)配额。

限制容器的CPU使用量。默认情况下,容器使用全部CPU资源运行。该限制是一个以微秒为单位的数字。如果提供了一个数字,则允许容器使用该数量的CPU时间,直到CPU周期结束(可通过 --cpu-period )。

在某些系统上,可能不允许非超级用户更改资源限制。欲了解更多详情,请访问https://github.com/containers/podman/blob/main/troubleshooting.md#26-running-containers-with-resource-limits-fails-with-a-permissions-error

Cgroup V1无根系统不支持此选项。

--cpu-rt-period = 微秒级

以微秒为单位限制CPU实时周期。

限制容器的实时CPU使用率。该选项告诉内核将容器的实时CPU使用率限制在指定的时间段内。

此选项仅在cgroup V1 Rootful系统上受支持。

--cpu-rt-runtime = 微秒级

以微秒为单位限制CPU实时运行时间。

限制容器的实时CPU使用率。该选项告诉内核限制给定的CPU周期内实时任务可能消耗的时间量。例如:周期为1,000,000 us,运行时间为95,000 us意味着该容器可以消耗95%的可用CPU,并将剩余的5%留给正常的优先级任务。

容器中所有运行时间的总和不能超过分配给父cgroup的数量。

此选项仅在cgroup V1 Rootful系统上受支持。

--cpu-shares-c = 股票

CPU占有率(相对权重)。

默认情况下,所有容器获得相同比例的CPU周期。可以通过相对于所有运行的容器的组合权重更改容器的CPU份额权重来修改此比例。默认权重为 1024

这一比例仅适用于CPU密集型进程正在运行时。当一个容器中的任务空闲时,其他容器可以使用剩余的CPU时间。根据系统上运行的容器数量,实际的CPU时间会有所不同。

例如,假设有三个容器,其中一个的CPU份额为1024,另外两个的CPU份额设置为512。当所有三个容器中的进程尝试使用100%的CPU时,第一个容器获得总CPU时间的50%。如果添加的第四个容器的CPU份额为1024,则第一个容器仅获得33%的CPU。其余容器分别获得16.5%、16.5%和33%的CPU。

在多核系统上,CPU时间的份额分布在所有CPU核上。即使容器的CPU时间被限制在100%以下,它也可以100%地使用每个单独的CPU核心。

例如,假设一个系统有三个以上的核心。如果容器 C0 开头是 --cpu-shares=512 运行一个进程和另一个容器 C1 使用 --cpu-shares=1024 运行两个进程时,这可能会导致以下CPU份额划分:

PID

容器

CPU

CPU占有率

100

C0

0

100%CPU0

101

C1

1

CPU1的100%

102

C1

2

CPU2的100%

在某些系统上,可能不允许非超级用户更改资源限制。欲了解更多详情,请访问https://github.com/containers/podman/blob/main/troubleshooting.md#26-running-containers-with-resource-limits-fails-with-a-permissions-error

Cgroup V1无根系统不支持此选项。

--cpus =

CPU数量。缺省值为 0.0 这意味着没有限制。这是以下的速记 --cpu-period--cpu-quota ,因此不能使用指定该选项 --cpu-period--cpu-quota

在某些系统上,可能不允许非超级用户更改CPU限制。欲了解更多详情,请访问https://github.com/containers/podman/blob/main/troubleshooting.md#26-running-containers-with-resource-limits-fails-with-a-permissions-error

Cgroup V1无根系统不支持此选项。

--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无根系统不支持此选项。

--decryption-key = [Key[:密码短语]]

这个 [key[:passphrase] ]用于图像解密。密钥可以指向密钥和/或证书。尝试使用所有密钥进行解密。如果密钥受密码短语保护,则需要在参数中传递该密钥,否则将被省略。

--device = host-device[:container-device][:permissions]

将主机设备添加到容器中。任选 permissions 参数可用于通过组合指定设备权限 r 对于阅读, w 用于写入,以及 mmknod (2)。

示例: --device=/dev/sdc:/dev/xvdc:rwm

注意:如果 host-device 是符号链接,则首先对其进行解析。容器仅存储主机设备的主号和次号。

Podman可能会加载使用指定设备所需的内核模块。Podman在必要时加载模块的设备是:/dev/fuse。

在无根模式下,新设备从主机绑定挂载到容器中,而不是Podman在容器空间中创建它。由于绑定挂载在SELinux系统上保留其SELinux标签,因此容器在访问挂载的设备时可能会被拒绝权限。通过以下命令修改SELinux设置以允许容器使用所有设备标签:

$sudo setsebool-P CONTAINER_USE_DEVICES=真

注意:如果用户只有通过组的访问权限,则无法从无根容器内部访问设备。使用 --group-add keep-groups 将用户的补充组访问权限传递到容器的标志。

--device-cgroup-rule = "type major:minor mode"

将规则添加到cgroup允许的设备列表。规则应采用Linux内核文档中指定的格式(Documentation/cgroup-v1/devices.txt):-类型:a(全部)、c(字符)或b(块);-主要和次要:数字或*代表所有;-模式:r(读取)、w(写入)和m(mKnod(2))的组合。

--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-read-iops = path:rate

限制设备的读取速率(以每秒IO操作数为单位)(例如 --device-read-iops=/dev/sda:1000 )。

在某些系统上,可能不允许非超级用户更改资源限制。欲了解更多详情,请访问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无根系统不支持此选项。

--device-write-iops = path:rate

限制设备的写入速率(以每秒IO操作数为单位)(例如 --device-write-iops=/dev/sda:1000 )。

在某些系统上,可能不允许非超级用户更改资源限制。欲了解更多详情,请访问https://github.com/containers/podman/blob/main/troubleshooting.md#26-running-containers-with-resource-limits-fails-with-a-permissions-error

Cgroup V1无根系统不支持此选项。

--disable-content-trust

这是特定于Docker的选项,用于禁用对容器注册表的镜像验证,Podman不支持。此选项是NOOP,仅用于脚本兼容性。

--dns = IP地址

设置自定义的DNS服务器。

此选项可用于覆盖传递给容器的DNS配置。通常这在主机DNS配置对于容器无效时是必要的(例如, 127.0.0.1 )。在这种情况下, --dns 旗帜对于每一次跑步都是必要的。

特殊的价值 none 可以指定为禁用创建 /etc/resolv.conf 在波德曼的集装箱里。这个 /etc/resolv.conf 在没有更改的情况下使用图像中的文件。

此选项不能与 --network 它被设置为 nonecontainer:id.

--dns-option = 选项

设置自定义的DNS选项。如果使用则无效 --dns-option 使用 --network 它被设置为 nonecontainer:id.

--dns-search =

设置自定义DNS搜索域。如果使用则无效 --dns-search 使用 --network 它被设置为 nonecontainer:id. 使用 --dns-search=. 要删除搜索域,请执行以下操作。

--entrypoint = “命令” | [‘[“命令”,“arg1”,...]’]

覆盖图像中的默认入口点。

映像的入口点类似于命令,因为它指定容器启动时要运行的可执行文件,但它(故意)更难覆盖。入口点为容器提供其默认性质或行为。当设置入口点时,容器就像它是该二进制文件一样运行,并带有默认选项。可以通过该命令传入更多选项。但是,如果用户想要在容器内运行其他内容, --entrypoint 选项允许指定新的入口点。

以json字符串的形式指定多选项命令。

--env-e = env

设置环境变量。

该选项允许在容器内启动进程可用的任意环境变量。如果指定的环境变量没有值,则Podman会检查主机环境中的值,并仅在主机上设置了该变量时才设置该变量。作为特例,如果环境变量以 * 则Podman将在主机环境中搜索以前缀开头的变量,并将这些变量添加到容器中。

看见 [Environment] (#Environment)下面的说明了解优先顺序和示例。

--env-file = file

从文件中读取环境变量,支持前缀匹配: KEY* ,以及双引号和单引号中的多行值,而不是反引号中的多行值。Env-file将忽略注释和空行。以及键前后的空格或制表符。如果遇到无效值,例如仅 = 签名,它将被跳过。如果它是前缀匹配 (KEY* ),则将加载主机上以key开头的所有环境变量。如果这只是关键 (KEY )时,将加载主机上的关键环境变量。与 export 中的语法 dotenv ,例如: export KEY=bar

看见 [Environment] (#Environment)下面的说明了解优先顺序和示例。

--env-host

使用容器内部的主机环境。看见 环境 请注意下面的优先顺序。(此选项不适用于远程Podman客户端,包括Mac和Windows(不包括WSL2)计算机)

--env-merge = env

对容器的默认环境变量进行预处理。例如,如果图像包含环境变量 hello=world 用户可以使用以下命令对其进行预处理 --env-merge hello=${hello}-some 因此,新的价值是 hello=world-some

请注意,如果环境变量 hello 不存在于图像中,则它将被空字符串替换,因此使用 --env-merge hello=${hello}-some 将产生新的 hello=-some ,请注意前导 - 分隔符。

--expose = port

暴露一个端口或一系列端口(例如 --expose=3300-3310 )在主机系统上设置端口重定向。

--gidmap = [flags]container_uid:from_uid[:amount]

使用提供的GID映射在新的用户命名空间中运行容器。此选项与 --userns--subgidname 选择。此选项提供了一种将主机GID映射到容器GID的方法,其方式与 --uidmap 将主机UID映射到容器UID。有关详情,请参阅 --uidmap.

注: --gidmap 选项不能与 --pod 在Pod中时,不能在容器级别上设置作为gidmap的选项。

--group-add = group | keep-groups

将其他组分配给在容器进程中运行的主要用户。

  • keep-groups 是一个特殊的标志,它告诉Podman保持辅助组的访问权限。

允许容器使用用户的补充组访问权限。如果文件系统或设备只能由无根用户的组访问,则此标志告诉OCI运行时将组访问传递到容器中。目前仅适用于 crun OCI运行时。注: keep-groups 是独占的,则不能使用此标志指定其他组。(不适用于远程命令,包括Mac和Windows(不包括WSL2)计算机)

--group-entry = ENTRY

自定义写入 /etc/group 在容器内放置文件时 --user 使用的是。

变量$GROUPNAME、$GID和$USERLIST在运行时自动替换为它们的值(如果存在)。

--health-cmd = “命令” | [‘[“命令”,“arg1”,...]’]

设置或更改容器的运行状况检查命令。该命令是在容器内执行的确定容器健康的命令。要应用其他运行状况检查选项,该命令是必需的。价值为 none 禁用现有运行状况检查。

可以以JSON数组的形式传递多个选项;否则,该命令将被解释为 /bin/sh -c

--health-interval = 间隔

设置运行状况检查的间隔。一个 interval禁用 导致不会自动设置计时器。默认为 30s

--health-on-failure = action

容器转换到不正常状态后要执行的操作。缺省值为 none

  • none :不采取行动。

  • kill :杀死集装箱。

  • restart :重启容器。请不要将 restart 使用 --restart 旗帜。当在system d单元内运行时,请考虑使用 killstop 操作,以利用systemd的重启策略。

  • stop :停止集装箱。

--health-retries = 重试

在运行状况检查被视为不健康之前允许的重试次数。默认值为 3

--health-start-period = 期间

容器引导所需的初始化时间。该值可以用如下所示的时间格式表示 2m3s 。默认值为 0s

--health-startup-cmd = "command" | '["command", "arg1", ...]'

为容器设置启动运行状况检查命令。该命令在容器内执行,用于控制常规的运行状况检查。启动命令成功后,将开始定期运行状况检查,并停止启动运行状况检查。或者,如果命令在设定的尝试次数后失败,容器将重新启动。启动健康检查可用于确保启动期延长的容器在完全启动之前不会被标记为不健康。启动运行状况检查只能在常规运行状况检查(从容器的映像或 --health-cmd 选项)也被设置。

--health-startup-interval = interval

设置启动运行状况检查的间隔。一个 intervaldisable 导致不会自动设置计时器。缺省值为 30s

--health-startup-retries = retries

在启动运行状况检查重新启动容器之前允许的尝试次数。如果设置为 0 ,容器永远不会重新启动。缺省值为 0

--health-startup-success = retries

启动运行状况检查成功并开始常规运行状况检查之前所需的成功运行次数。价值为 0 意味着任何成功都是定期健康检查的开始。缺省值为 0

--health-startup-timeout = timeout

启动运行状况检查命令在标记为失败之前必须完成的最长时间。该值可以用如下所示的时间格式表示 2m3s 。缺省值为 30s

--health-timeout = 超时

在间隔被视为失败之前允许完成运行状况检查的最长时间。与Start-Period类似,该值可以用如下所示的时间格式表示 1m22s 。默认值为 30s

--help

打印用法报表

--hostname-h = name

容器主机名

设置容器内可用的容器主机名。只能与私有UTS命名空间一起使用 --uts=private (默认)。如果 --pod 并且Pod共享UTS名称空间(默认),则使用Pod的主机名。

--hostuser = name

将一个用户帐户从主机添加到容器的/etc/passwd。主机系统上必须存在用户名或UID。

--http-proxy

默认情况下,如果为Podman进程设置了代理环境变量,则会将其传递到容器中。可以通过将值设置为来禁用此功能 false 。传入的环境变量包括 http_proxyhttps_proxyftp_proxyno_proxy ,以及这些字符的大写形式。仅当主机系统必须使用代理,但容器不使用任何代理时,才需要此选项。以任何其他方式为容器指定的代理环境变量将覆盖从主机传递的值。(指定容器代理的其他方法包括将值与 --env 标记,或在容器构建时对代理环境进行硬编码。)当与远程客户端一起使用时,它使用在服务器进程上设置的代理环境变量。

默认为 true

--image-volume = bind | tmpfs | ignore

告诉Podman如何处理内置图像卷。默认值为 bind

  • bind :创建匿名命名卷并将其挂载到容器中。

  • Tmpf :卷作为tmpfs挂载到容器上,允许用户创建容器停止时消失的内容。

  • 忽略 :所有卷都被忽略,不采取任何操作。

--init

在容器内运行一个init,用于转发信号和获取进程。容器初始二进制文件挂载在 /run/podman-init 。安装在 /run 中断容器执行。

--init-ctr = type

(仅限Pod)。在使用Pod时,创建一个init样式的容器,该容器在启动基础设施容器之后、启动常规Pod容器之前运行。初始化容器对于运行Pod应用程序的安装操作非常有用。

的有效值 init-ctr 类型为 alwaysonce 。这个 always 值表示容器与每个 pod start ,而 once 值表示容器在实例启动后移除时只运行一次。

初始化容器仅在Pod上运行 start 。重新启动Pod不会执行任何init容器。此外,只有当Pod没有运行时,才能在Pod中创建初始化容器。

--init-path = path

容器初始化二进制文件的路径。

--interactive-i

当设置为时 true ,使stdin保持打开状态,即使未连接。默认为 错误

--ip = ipv4

为容器指定静态IPv4地址,例如 10.88.64.128 。仅当容器仅加入到单个网络时才能使用该选项--即, --network=network-name 最多使用一次-如果容器没有通过 --network=container:id 。地址必须在网络的IP地址池内(默认 10.88.0.0/16 )。

若要为每个容器指定多个静态IP地址,请使用 --network 选项,为每个选项指定一个静态IP地址 ip 该选项的模式。

--ip6 = ipv6

为容器指定静态IPv6地址,例如 FD46:DB93:AA76:AC37::10 。仅当容器仅加入到单个网络时才能使用该选项--即, --network=network-name 最多使用一次-如果容器没有通过 --network=container:id 。该地址必须在网络的IPv6地址池内。

若要为每个容器指定多个静态IPv6地址,请使用 --network 选项,为每个选项指定一个静态IPv6地址 ip6 该选项的模式。

--ipc = ipc

设置容器的IPC命名空间模式。默认情况下,创建私有IPC命名空间。

  • “”:使用Podman的默认设置,在tainers.conf中定义。

  • 容器: id:重用另一个容器的共享内存、信号量和消息队列

  • host :使用容器内主机的共享内存、信号量和消息队列。注意:主机模式授予容器对本地共享内存的完全访问权限,因此被认为是不安全的。

  • none :私有IPC命名空间,未挂载/dev/shm。

  • ns: Path:要加入的IPC命名空间的路径。

  • private :私有IPC命名空间。

  • shareable :私有IPC命名空间,可以与其他容器共享。

--label-l = key=value

将元数据添加到容器。

--label-file = file

读入以行分隔的标签文件。

--log-driver = driver

容器的日志记录驱动程序。目前可用的选项有 k8s-filejournaldnonepassthroughjson-file 别名为 k8s-file 用于脚本兼容性。(默认 journald )。

下面的podman info命令显示系统的默认日志驱动程序。

$ podman info --format '{{ .Host.LogDriver }}'
journald

这个 通过 驱动程序将标准流(stdin、stdout、stderr)向下传递到容器。远程Podman客户端(包括Mac和Windows(不包括WSL2)计算机)以及TTY上不允许存在该漏洞,因为它容易受到通过TIOCSTI的攻击。

--log-opt = name=value

记录驱动程序特定选项。

设置自定义日志记录配置。以下是 name 支持:

path :指定日志文件的路径(例如 --log-opt path=/var/log/container/mycontainer.json );

max-size :指定日志文件的最大大小(例如 --log-opt max-size=10mb );

tag :指定容器的自定义日志标记(例如 --log-opt tag="{{.ImageName}}" 。它支持的密钥与 podman inspect --format 。此选项当前仅受 journald 日志驱动程序。

--mac-address = 地址

容器网络接口MAC地址(例如92:D0:C6:0A:29:33)仅当容器仅加入单个网络时才能使用该选项-即, --network=network-name 最多使用一次-如果容器没有通过 --network=container:id

请记住,以太网络中的MAC地址必须唯一。根据RFC4862,IPv6本地链路地址基于设备的MAC地址。

若要为每个容器指定多个静态MAC地址,请使用 --network 选项,为每个选项指定静态MAC地址 mac 该选项的模式。

--memory-m = number[unit]

内存限制。一个 unitb (字节), k (千比字节), m (兆字节),或 g (千兆字节)。

允许限制容器可用的内存。如果主机支持交换内存,则 -m 内存设置可以大于物理RAM。如果指定限制为0(不使用 -m ),容器的内存不受限制。实际限制可能四舍五入为操作系统页面大小的倍数(该值非常大,即数百万万亿)。

Cgroup V1无根系统不支持此选项。

--memory-reservation = number[unit]

内存软限制。一个 unitb (字节), k (千比字节), m (兆字节),或 g (千兆字节)。

设置内存预留后,当系统检测到内存争用或内存不足时,会强制容器将其消耗限制为其预留。因此,请始终将该值设置为 --memory ,否则以硬限制为准。默认情况下,内存预留与内存限制相同。

Cgroup V1无根系统不支持此选项。

--memory-swap = number[unit]

一个等于内存加交换空间的限制值。一个 unitb (字节), k (千比字节), m (兆字节),或 g (千兆字节)。

必须与 -m ( --memory )旗帜。参数值必须大于 -m ( --memory )默认情况下,它被设置为值的两倍 --memory

设置 number-1 以启用无限制交换。

Cgroup V1无根系统不支持此选项。

--memory-swappiness =

调整容器的内存交换行为。接受介于以下范围的整数 0100

此标志仅在cgroup V1 Rootful系统上受支持。

--mount = [type=TYPE,TYPE-SPECIFIC-OPTION[,...]]

将文件系统挂载附加到容器

当前支持的装载类型包括 binddevptsglobimageramfstmpfsvolume [1]

   e.g.
   type=bind,source=/path/on/host,destination=/path/in/container

   type=bind,src=/path/on/host,dst=/path/in/container,relabel=shared

   type=bind,src=/path/on/host,dst=/path/in/container,relabel=shared,U=true

   type=devpts,destination=/dev/pts

   type=glob,src=/usr/lib/libfoo*,destination=/usr/lib,ro=true

   type=image,source=fedora,destination=/fedora-image,rw=true

   type=ramfs,tmpfs-size=512M,destination=/path/in/container

   type=tmpfs,tmpfs-size=512M,destination=/path/in/container

   type=tmpfs,destination=/path/in/container,noswap

   type=volume,source=vol1,destination=/path/in/container,ro=true

   Common Options:

      · src, source: mount source spec for bind, glob, and volume. Mandatory for bind and glob.

      · dst, destination, target: mount destination spec.

      When source globs are specified without the destination directory,
          the files and directories are mounted with their complete path
      within the container. When the destination is specified, the
      files and directories matching the glob on the base file name
      on the destination directory are mounted. The option
      `type=glob,src=/foo*,destination=/tmp/bar` tells container engines
      to mount host files matching /foo* to the /tmp/bar/
      directory in the container.

   Options specific to volume:

      · ro, readonly: true or false (default).

      . U, chown: true or false (default). Change recursively the owner and group of the source volume based on the UID and GID of the container.

      · idmap: true or false (default).  If specified, create an idmapped mount to the target user namespace in the container.
      The idmap option supports a custom mapping that can be different than the user namespace used by the container.
      The mapping can be specified after the idmap option like: `idmap=uids=0-1-10#10-11-10;gids=0-100-10`.  For each triplet, the first value is the
      start of the backing file system IDs that are mapped to the second value on the host.  The length of this mapping is given in the third value.
      Multiple ranges are separated with #.  If the specified mapping is prepended with a '@' then the mapping is considered relative to the container
      user namespace. The host ID for the mapping is changed to account for the relative position of the container user in the container user namespace.

   Options specific to image:

      · rw, readwrite: true or false (default).

   Options specific to bind and glob:

      · ro, readonly: true or false (default).

      · bind-propagation: shared, slave, private, unbindable, rshared, rslave, runbindable, or rprivate(default). See also mount(2).

      . bind-nonrecursive: do not set up a recursive bind mount. By default it is recursive.

      . relabel: shared, private.

      · idmap: true or false (default).  If specified, create an idmapped mount to the target user namespace in the container.

      . U, chown: true or false (default). Change recursively the owner and group of the source volume based on the UID and GID of the container.

   Options specific to tmpfs and ramfs:

      · ro, readonly: true or false (default).

      · tmpfs-size: Size of the tmpfs/ramfs mount in bytes. Unlimited by default in Linux.

      · tmpfs-mode: File mode of the tmpfs/ramfs in octal. (e.g. 700 or 0700.) Defaults to 1777 in Linux.

      · tmpcopyup: Enable copyup from the image directory at the same location to the tmpfs/ramfs. Used by default.

      · notmpcopyup: Disable copying files from the image to the tmpfs/ramfs.

      . U, chown: true or false (default). Change recursively the owner and group of the source volume based on the UID and GID of the container.

   Options specific to devpts:

      · uid: UID of the file owner (default 0).

      · gid: GID of the file owner (default 0).

      · mode: permission mask for the file (default 600).

      · max: maximum number of PTYs (default 1048576).

--name = name

为容器指定一个名称。

操作员可以通过三种方式识别容器:

  • Uuid长标识符(“f78375b1c487e03c9438c729345e54db9d20cfa2ac1fc3494b6eb60872e74778”);

  • UUID短标识(“f78375b1c487”);

  • 姓名(“约拿”)。

Podman为每个容器生成一个UUID,如果没有使用 --name 然后它会生成一个随机的字符串名称。作为一种更友好的识别容器的方式,该名称可能很有用。这对后台容器和前台容器都有效。

--network = mode--net

设置容器的网络模式。

有效 mode 值包括:

  • [bridge[:OPTIONS,...]] :在默认网桥上创建网络堆栈。这是Rootful Containers的默认设置。可以指定以下附加选项:

    • alias=name :为容器添加网络范围的别名。

    • ip=IPv4 :为此容器指定静态IPv4地址。

    • ip=IPv6 :为此容器指定静态IPv6地址。

    • mac=MAC :为此容器指定静态MAC地址。

    • interface_name :为容器内部创建的网络接口指定名称。

      例如,要设置静态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,...]] :使用 滑行4net (1)创建用户网络堆栈。这是无根容器的默认设置。可以指定这些附加选项,也可以使用 network_cmd_options 在tainers.conf中:

    • allow_host_loopback=true|false :允许illrp4netns到达主机环回IP(默认为10.0.2.2或更改后的illrp4netns CIDR子网中的第二个IP,请参阅下面的CIDR选项)。默认值为FALSE。

    • mtu=MTU :指定要用于此网络的MTU。(默认为 65520 )。

    • cidr=CIDR :指定要用于此网络的IP范围。(默认为 10.0.2.0/24 )。

    • enable_ipv6=true|false :启用IPv6。默认值为True。(需要 outbound_addr6 )。

    • outbound_addr=INTERFACE :指定SILRP绑定到的出站接口(仅限IPv4流量)。

    • outbound_addr=IPv4 :指定SILRP绑定到的出站IPv4地址。

    • outbound_addr6=INTERFACE :指定SILRP绑定到的出站接口(仅限IPv6流量)。

    • outbound_addr6=IPv6 :指定SILRP绑定到的出站IPv6地址。

    • port_handler=rootlesskit :使用无根套件进行端口转发。默认值。注意:Rootless Kit将传入数据包的源IP地址更改为容器网络命名空间中的IP地址,通常 10.0.2.100 。如果应用程序需要真实的源IP地址,例如Web服务器日志,请使用glirp4netns端口处理程序。当连接到用户定义的网络时,无根工具包端口处理程序也用于无根容器。

    • port_handler=slirp4netns :使用glirp4netns端口转发,它比rootless kit慢,但保留了正确的源IP地址。此端口处理程序不能用于用户定义的网络。

  • pasta[:OPTIONS,...]: use pasta(1) to create a user-mode networking stack.
    This is 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. If port forwarding isn't configured, ports are forwarded dynamically as services are bound on either side (init namespace or container namespace). 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).
    Also, -t none and -u none are passed if, respectively, no TCP or UDP port forwarding from host to container is configured, 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.
    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接口以提高性能

    注意:出于向后兼容性的原因,如果存在名为 pasta ,Podman使用它而不是意大利面模式。

如果使用则无效 --dns--dns-option ,或 --dns-search 使用 --network 设置为 nonecontainer:id.

如果与一起使用 --pod ,容器不会加入Pod的网络命名空间。

--network-alias = 别名

为容器添加网络范围的别名,为容器加入的所有网络设置别名。要仅为特定网络设置名称,请使用别名选项,如中所述 --network 选择。如果网络启用了DNS (podman network inspect -f {{.DNSEnabled}} <name> ),这些别名可用于给定网络上的名称解析。可以多次指定此选项。注意:当使用CNI时,容器只能访问它加入的第一个网络上的别名。Netavark/aardvark-dns不存在此限制。

--no-healthcheck

禁用任何已定义的容器运行状况检查。

--no-hosts

不创建 /etc/hosts 用来装集装箱。默认情况下,Podman管理 /etc/hosts, 添加容器自己的IP地址和来自 --add-host--no-hosts 禁用此选项,则图像的 /etc/hosts 被原封不动地保存下来。

此选项与 --add-host

--oom-kill-disable

是否禁用容器的OOM Killer。

Cgroup V2系统不支持此标志。

--oom-score-adj = num

调整主机的容器的OOM首选项(接受来自 -10001000 )。

--os = OS

覆盖要拉取的映像的操作系统,默认为主机。例如, windows 。除非被覆盖,否则对本地存储中相同映像的后续查找将与此操作系统匹配,而与主机无关。

--passwd-entry = ENTRY

自定义写入 /etc/passwd 在容器内放置文件时 --passwd 是使用的。

变量$USERNAME、$UID、$GID、$NAME、$HOME会在运行时自动替换为它们的值。

--personality = 人物角色

个性通过Linux个性设置执行域(2)。

--pid = mode

设置容器的PID命名空间模式。默认情况下,为容器创建私有的PID命名空间。

  • 容器: id:加入另一个容器的id命名空间;

  • host :对容器使用主机的PID命名空间。注意:主机模式赋予容器对本地PID的完全访问权限,因此被认为是不安全的;

  • ns: PATH:加入指定的PID命名空间;

  • 私人 :为容器创建新的命名空间(默认)。

--pidfile = path

当指定了pidfile位置时,容器进程的id被写入到pidfile中。(此选项在远程Podman客户端上不可用,包括Mac和Windows(不包括WSL2)计算机)如果未指定pidfile选项,则容器进程的ID将写入/run/containers/storage/${storage-driver}-containers/$CID/userdata/pidfile.

启动容器后,可以通过以下命令发现pidfile的位置 podman inspect 命令:

$ podman inspect --format '{{ .PidFile }}' $CID
/run/containers/storage/${storage-driver}-containers/$CID/userdata/pidfile

--pids-limit = 限制

调整容器的PID限制。设置为 -1 为集装箱提供无限的PID。缺省值为 2048 在支持“PIDS”cgroup控制器的系统上。

--platform = OS/ARCH

指定用于选择映像的平台。(与--Arch和--os冲突) --platform 选项可用于覆盖当前的体系结构和操作系统。除非被覆盖,否则对本地存储中相同映像的后续查找将与此平台匹配,而与主机无关。

--pod = name

在现有Pod中运行容器。如果Pod名称前面加上前缀,则Podman会自动生成Pod new: 。要使用更细粒度的选项创建Pod,请使用 podman pod create 命令,然后再创建容器。当容器与带有下容器的吊舱一起运行时,首先启动下容器。

--pod-id-file = file

在现有Pod中运行容器,并从指定的 file 。当容器在具有下容器的吊舱内运行时,下容器首先启动。

--privileged

将扩展权限授予此容器。默认为 错误

默认情况下,Podman容器没有特权( =false ),并且例如不能修改操作系统的某些部分。这是因为默认情况下,容器仅被允许对设备进行有限访问。除虚拟控制台外,授权的容器对设备的访问权限与启动该容器的用户相同 (/dev/tty\d+) 在system d模式下运行时( --systemd=always )。

特权容器关闭将容器与主机隔离的安全功能。删除的功能、有限的设备、只读装载点、Apparmor/SELinux分离和Seccomp筛选器都被禁用。

无根容器不能拥有比启动它们的帐户更多的权限。

--publish-p = [[ip:][hostPort]:]containerPort[/protocol]

将容器的端口或端口范围发布到主机。

两者都有 hostPortcontainerPort 可以指定为端口范围。为这两个范围指定范围时,范围内的集装箱端口数必须与范围内的主机端口数匹配。

如果主机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

Note: 如果容器运行在实例中,则无需发布实例中容器的端口。端口只能由Pod本身发布。Pod网络堆栈的作用类似于主机上的网络堆栈-当Pod中有各种容器,容器中的程序都共享单个接口和IP地址以及相关端口时。如果一个容器绑定到一个端口,则当该端口正在使用时,其他任何容器都不能使用Pod内的该端口。Pod中的容器还可以通过将一个容器绑定到Pod中的本地主机,并将另一个容器连接到该端口来通过本地主机进行通信。

--publish-all-P

将所有暴露的端口发布到主机接口上的随机端口。默认为 错误

当设置为时 true ,将所有公开的端口发布到主机接口。如果操作员使用 -P (或 -p )然后,Podman使暴露的端口可以在主机上访问,并且这些端口可供任何可以到达该主机的客户端使用。

使用此选项时,Podman会将任何暴露的端口绑定到主机上由定义的临时端口范围内的随机端口 /proc/sys/net/ipv4/ip_local_port_range 。要查找主机端口和公开端口之间的映射,请使用 podman port

--pull = policy

拉取镜像策略。缺省值为 missing

  • always :始终拉取镜像,如果拉取失败则抛出错误。

  • missing :仅当镜像不在本地容器存储中时才拉取镜像。如果找不到镜像且拉取失败,则抛出错误。

  • never :不要拉取镜像,而要使用本地容器存储中的镜像。如果找不到图像,则抛出错误。

  • newer :如果注册表上的映像比本地容器存储中的映像新,则拉取。当摘要不同时,图像被认为是较新的。比较时间戳容易出错。如果找到本地映像,则会抑制拉入错误。

--quiet-q

在拉取图像时抑制输出信息

--read-only

将容器的根文件系统挂载为只读。

默认情况下,容器根文件系统是可写的,允许进程在任何地方写入文件。通过指定 --read-only 标志时,容器根文件系统以只读方式挂载,禁止任何写入。

--read-only-tmpfs

如果容器正在运行 --read-only 模式,然后将读写tmpf挂载到 /dev, /dev/shm, /run, /tmp, 和 /var/tmp. 缺省值为 true

--replace

如果已存在具有相同名称的另一个容器,请替换并删除它。默认为 错误

--requires = container

指定一个或多个要求。需求是在该容器之前启动的依赖项容器。容器可以按名称或ID指定,多个容器之间用逗号分隔。

--restart = 政策

重新启动策略以在容器退出时遵循。重新启动策略不会生效,如果通过 podman killpodman stop 命令。

有效 policy 值包括:

  • no :退出时不重新启动容器

  • never :同义词 no ;退出时不重新启动容器

  • on-failure[:max_retries] :当容器以非零退出代码退出时重新启动容器,无限期重试或直到可选的 max_retries 命中计数

  • always :容器退出时重新启动,无论状态如何,无限期重试

  • unless-stopped :等同于 始终

Podman提供了一个系统单元文件podman-restart.service,它在系统重新启动后重新启动Containers。

如果CONTAINER作为系统服务运行,则生成一个SYSTEM D单元文件来管理它。看见 podman generate systemd

--rm

当容器退出时,自动删除该容器以及与该容器关联的任何匿名未命名卷。缺省值为 false

--rootfs

如果指定,第一个参数将引用文件系统上的分解容器。

这对于在不需要任何镜像管理的情况下运行容器非常有用,假定容器的根文件系统是从外部管理的。

Overlay Rootfs Mounts

这个 :O 标志告诉Podman将rootfs路径中的目录装载为使用 overlay file system 。容器进程可以修改装载点内的内容,该装载点存储在容器存储中的单独目录中。在重叠术语中,源目录位于较低位置,容器存储目录位于较高位置。当容器完成执行时,对挂载点的修改将被销毁,这与卸载tmpfs挂载点类似。

注:打开 SELinux 系统时,rootfs需要正确的标签,该标签在默认情况下是 unconfined_u:object_r:container_file_t:s0

idmap

如果 idmap ,则创建到容器中目标用户命名空间的idmap挂载。Idmap选项支持与容器使用的用户命名空间不同的自定义映射。可以在idmap选项后面指定映射,如下所示: idmap=uids=0-1-10#10-11-10;gids=0-100-10 。对于每个三元组,第一个值是映射到主机上第二个值的备份文件系统ID的开始。此映射的长度在第三个值中给出。多个范围用#分隔。

--sdnotify = container | conmon | healthy | ignore

确定如何使用NOTIFY_SOCKET,与SYSTEM d和Type=NOTIFY一起传递。

缺省值为 container 这意味着允许OCI运行时将套接字代理到容器中以接收就绪通知。Podman将MAINPID设置为COMON的PID。这个 conmon 选项将MAINPID设置为COMON的PID,并在容器启动时发送READY。套接字永远不会传递给运行库或容器。这个 healthy 选项将MAINPID设置为COMON的PID,并在容器恢复健康时发送READY;需要设置运行状况检查。套接字永远不会传递给运行库或容器。这个 ignore 选项从自身和子进程的环境中删除NOTIFY_SOCKET,用于Podman上面的其他进程使用NOTIFY_SOCKET而Podman不使用它的情况。

--seccomp-policy = 政策

指定策略以选择seccomp配置文件。如果设置为 image 中,Podman在容器映像配置中查找“io.tainers.seccom.profile”标签,并将其值用作seccomp配置文件。否则,波德曼就会遵循 default 策略:应用默认配置文件,除非通过 --security-opt seccomp 如下所述。

请注意,此功能是试验性的,将来可能会更改。

--secret = secret[,opt=opt ...]

为容器提供访问秘密的权限。可以多次指定。

秘密是容器在运行时需要的一组敏感数据,但不存储在映像或源代码控制中,例如用户名和密码、TLS证书和密钥、SSH密钥或其他重要的通用字符串或二进制内容(大小最大为500 kb)。

当机密被指定为类型时 mount ,则在创建容器时将秘密复制并装载到容器中。当机密被指定为类型时 env ,则将秘密设置为容器内的环境变量。在创建容器时将机密写入容器中,并使用 podman secret 创建容器后的命令会影响容器内部的机密。

密钥及其存储使用 podman secret 指挥部。

秘密选项

  • type=mount|env :秘密是如何暴露给容器的。 mount 将秘密作为文件装载到容器中。 env 将秘密作为环境变量公开。默认为 mount

  • target=target :秘密目标。对于挂载的机密,这是通往容器内机密的路径。如果提供了完全限定的路径,则密码将装载在该位置。否则,该密码将挂载到 /run/secrets/target 对于Linux容器或 /var/run/secrets/target 适用于FreeBSD容器。如果未设置目标,则会将密码挂载到 /run/secrets/secretname 默认情况下。对于环境机密,这是环境变量密钥。默认为 secretname

  • uid=0 :UID的秘密。默认为0。仅装载机密类型。

  • gid=0 :GID的秘密。默认为0。仅装载机密类型。

  • mode=0 :保密模式。默认为0444。仅装载机密类型。

实例

挂载位置 /my/location/mysecret UID为1:

--secret mysecret,target=/my/location/mysecret,uid=1

挂载位置 /run/secrets/customtarget 使用模式0777:

--secret mysecret,target=customtarget,mode=0777

创建名为的秘密环境变量 ENVSEC

--secret mysecret,type=env,target=ENVSEC

--security-opt = 选项

安全选项

  • apparmor=unconfined :关闭容器的仪表限制

  • apparmor =Alternate-Profile:设置容器的设备限制配置文件

  • label=user: USER:设置容器进程的标签用户

  • label=role: Role:设置容器进程的标签角色

  • label=type: type:设置容器流程的标签流程类型

  • label=level: Level:设置容器进程的标签级别

  • label=filetype: type:设置容器文件的标签文件类型

  • label=disable :关闭容器的标签分离

Note: Labeling can be disabled for all 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:要屏蔽的路径用冒号分隔。无法在容器内访问掩码路径。

  • no-new-privileges :禁止容器进程获得额外权限。

  • seccomp=unconfined :关闭容器的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 *. 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=falsecontainers.conf (5)归档。

--shm-size = number[unit]

大小 /dev/shm. A unitb (字节), k (千比字节), m (兆字节),或 g (千兆字节)。如果省略单位,则系统使用字节。如果省略大小,则默认为 64m 。什么时候 size0 ,容器对IPC使用的内存量没有限制。此选项与 --ipc=host

--shm-size-systemd = number[unit]

特定于system d的tmpf挂载的大小,例如/run、/run/lock、/var/log/Journal和/tmp。一个 unitb (字节), k (千比字节), m (兆字节),或 g (千兆字节)。如果省略单位,则系统使用字节。如果省略大小,则默认为 64m 。什么时候 size0 ,使用量被限制为主机可用内存的50%。

--stop-signal = 信号

发出停止容器的信号。默认值为 SIGTERM

--stop-timeout = 一秒

停止容器的超时。缺省值为 10 。远程连接使用本地tainers.conf作为默认设置。

--subgidname = name

使用映射在新的用户命名空间中运行容器 name/etc/subgid 文件。如果运行无根用户,则用户需要具有使用映射的权限。看见 subgid (5)。此标志与 --userns--gidmap

--subuidname = name

使用映射在新的用户命名空间中运行容器 name/etc/subuid 文件。如果运行无根用户,则用户需要具有使用映射的权限。看见 subuid (5)。此标志与 --userns--uidmap

--sysctl = name=value

在运行时配置命名空间的内核参数。

对于IPC命名空间,允许使用以下sysctls:

  • kernel.msgmax

  • kernel.msgmnb

  • kernel.msgmni

  • kernel.sem

  • kernel.shmall

  • kernel.shmmax

  • kernel.shmmni

  • kernel.shm_rmid_forced

  • 以fs.mQueue开头的系统。*

注意:如果使用 --ipc=host 选项,则不允许使用上述sysctls。

对于网络命名空间,只允许使用以NET.*开头的sysctls。

注意:如果使用 --network=host 选项,则不允许使用上述sysctls。

--systemd = true | false | always

在SYSTEM D模式下运行容器。默认为 true

  • true 仅当在容器内执行的命令为 systemd/usr/sbin/init/sbin/init/usr/local/sbin/init

  • false 禁用系统d模式。

  • always 强制启用system d模式。

在SYSTEM D模式下运行容器会导致以下更改:

  • Podman将tmpfs文件系统挂载到以下目录

    • /run

    • /run/lock

    • /tmp

    • /sys/fs/cgroup/systemd

    • /var/lib/journal

  • Podman将默认停止信号设置为 签名+3

  • 波德曼集 container_uuid 环境变量设置为容器ID的前32个字符。

  • Podman不挂载虚拟控制台 (/dev/tty\d+) 在使用运行时 --privileged

这使得system d无需任何修改即可在受限容器中运行。

请注意,打开 SELinux 系统中,系统d尝试写入cgroup文件系统。默认情况下,写入cgroup文件系统的容器被拒绝。这个 container_manage_cgroup 必须启用布尔值,才能在SELinux独立的系统上执行此操作。

setsebool -P container_manage_cgroup true

--timeout = 一秒

容器在conmon向其发送终止信号之前允许运行的最长时间。默认情况下,容器一直运行,直到它们退出或被停止 podman stop

--tls-verify

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

--tmpfs = fs

创建一个tmpfs装载。

装载临时文件系统( Tmpf )安装到容器中,例如:

$ podman create -d --tmpfs /tmp:rw,size=787448k,mode=1777 my_image

此命令将装载一个 tmpfs 在… /tmp 在集装箱里。支持的挂载选项与Linux默认挂载标志相同。如果未指定选项,系统将使用以下选项: rw,noexec,nosuid,nodev

--tty-t

分配一个伪TTY。默认为 错误

当设置为时 true ,Podman分配一个伪tty并附加到容器的标准输入。例如,这可以用来运行一次性交互Shell。

NOTE :--tty标志防止重定向标准输出。它结合了STDOUT和STDERR,可以插入控制字符,还可以悬挂管道。仅当在终端中以交互方式运行时才使用此选项。向Podman提供输入时,请使用-I Only,Not-It。

--tz = 时区

在容器中设置时区。此标志采用基于区域的时区、GMT时间以及 local ,它设置容器中的时区以匹配主机。看见 /usr/share/zoneinfo/ 对于有效的时区。远程连接使用本地容器.conf作为默认设置

--uidmap = [flags]container_uid:from_uid[:amount]

使用提供的UID映射在新的用户名称空间中运行容器。此选项与 --userns--subuidname 选择。此选项提供将主机UID映射到容器UID的方法。它可以多次传递以映射不同的范围。

可选属性的可能值 flags 在本页下面进行了进一步的讨论。这个 amount 值是可选的,并且假定为 1 如果不给的话。

这个 from_uid 值基于运行该命令的用户,有根用户或无根用户。

  • Rootful用户: [flags] container_uidhost_uid [:amount]

  • 无根用户: [flags] container_uidintermediate_uid [:amount]

    Rootful mappings

什么时候 podman create 由特权用户调用,则该选项 --uidmap 用作主机UID和容器UID之间的直接映射。

主机UID->容器UID

这个 amount 指定映射的连续UID的数量。如果例如 amount4 该映射如下所示:

主机UID

容器UID

from_uid

container_uid

from_uid +1

container_uid +1

from_uid +2

container_uid +2

from_uid +3

container_uid +3

Rootless mappings

什么时候 podman create 由非特权用户(即无根运行)调用,则值 from_uid 被解释为“中间UID”。在无根的情况下,主机UID不会直接映射到容器UID。相反,映射分两个映射步骤进行:

主机UID->中间UID->容器UID

这个 --uidmap 选项仅影响第二个映射步骤。

第一个映射步骤由Podman从文件内容派生而来 /etc/subuid 以及调用Podman的用户的UID。

第一个映射步骤:

主机UID

中间UID

Podman用户的UID

0

第一个下属UID

1

第二个下属UID

2

第三个从属UID

3

第n个从属UID

n

为了能够使用大于零的中间UID,用户需要在中配置从属UID /etc/subuid. 看见 子实体 (5)。

第二个映射步骤配置有 --uidmap

如果例如 amount5 第二个映射步骤如下所示:

中间UID

容器UID

from_uid

container_uid

from_uid +1

container_uid +1

from_uid +2

container_uid +2

from_uid +3

container_uid +3

from_uid +4

container_uid +4

当以无根用户身份运行时,Podman使用在 /etc/subuid 文件。

当前用户ID被映射到无根用户命名空间中的UID=0。之后按顺序添加每个额外的范围:

主机

无根用户命名空间

长度

$UID

0

1

1

$FIRST_RANGE_ID

$FIRST_RANGE_LENGTH

1+$FIRST_RANGE_LENGTH

$SECOND_RANGE_ID

$SECOND_RANGE_LENGTH

Referencing a host ID from the parent namespace

作为无根用户,中的给定主机ID --uidmap--gidmap 是从 intermediate namespace 由波德曼制作。有时,最好直接在 host namespace 。可以通过运行以下命令手动执行此操作 podman unshare cat /proc/self/gid_map 在输出的第二列找到所需的主机ID,并从第一列获得相应的中间ID。

Podman可以通过在映射中的主机ID前面加上 @ 象征。例如,通过指定 --gidmap 100000:@2000:1 ,Podman将查找与主机ID对应的中间ID 2000 并将找到的中间id映射到容器id。 100000 。给定的主机ID必须是从属的(否则它一开始就不会被映射到中间空间)。

如果长度大于1,例如 --gidmap 100000:@2000:2 ,Podman将映射主机ID 20002001100000100001 ,而不管中间映射是如何定义的。

Extending previous mappings

一些映射修改可能会很麻烦。例如,用户从如下映射开始 --gidmap="0:0:65000" ,它需要更改,如父ID 1000 映射到容器ID 100000 相反,保留容器ID 1 未分配。相应的 --gidmap vbl.成为 --gidmap="0:0:1" --gidmap="2:2:65534" --gidmap="100000:1:1"

此表示法可以使用 + 标志,该标志负责中断先前的映射,删除与给定映射有冲突的赋值。在容器ID之前给出的标志如下: --gidmap="0:0:65000" --gidmap="+100000:1:1"

旗帜

示例

描述

+

+100000:1:1

扩展上一个映射

这种记号会导致分配中的空白,因此以后可以方便地填补这些空白: --gidmap="0:0:65000" --gidmap="+100000:1:1" --gidmap="1:65001:1"

此标志的一个特定用例是在无根用户的上下文中。无根用户可以使用 + 旗帜如中 --gidmap="+100000:1:1" 。然后,Podman将用所有剩余的中间ID从零开始“填补空白”。当用户想要将特定的中间ID映射到容器ID时,这很方便,而剩下的从属ID则由Podman随意映射。

Passing only one of --uidmap or --gidmap

通常,从属用户和组ID是同时分配的,对于任何用户,从属用户ID与从属组ID匹配。为了方便起见,如果只有一个 --uidmap--gidmap 时,Podman假定映射同时引用UID和GID,并将给定的映射应用于两者。如果只需要更改这两个值中的一个,则映射应包括 ug 用于指定它们仅应用于UID或GID且不应被复制的标志。

旗子

示例

描述

u

u20000:2000:1

该映射仅适用于UID

g

g10000:1000:1

该映射仅适用于GID

例如,给定命令

podman create --gidmap "0:0:1000" --gidmap "g2000:2000:1"

既然没有 --uidmap 是给定的,则 --gidmap 被复制到 --uidmap ,给出一个等同于

podman create --gidmap "0:0:1000" --gidmap "2000:2000:1" --uidmap "0:0:1000"

这个 --gidmap "g2000:2000:1" 使用了 g 标志,因此未将其复制到 --uidmap

Rootless mapping of additional host GIDs

无根用户可能希望映射已经从属于 /etc/subgid 而不指定映射的其余部分。

这可以通过以下方式完成 --gidmap "+gcontainer_gid:@host_gid"

在哪里:

  • 主机GID通过 @ 符号

  • 此GID的映射不会复制到 --usermap 多亏了 g 旗帜。

  • 其余的容器ID将从0映射到n,其余的从属GID都将被映射,这要归功于 + 旗帜。

例如,如果用户属于组 2000 并且该组从属于该用户(具有 usermod --add-subgids 2000-2000 $USER ),用户可以使用以下方式将组映射到容器中: --gidmap=+g100000:@2000

如果该映射与选项组合, --group-add=keep-groups ,容器中的进程将属于组 100000 和属于组的文件 2000 将显示为由组拥有 100000 在集装箱里。

podman run --group-add=keep-groups --gidmap="+g100000:@2000" ...

No subordinate UIDs

Even if a user does not have any subordinate UIDs in /etc/subuid, --uidmap can be used to map the normal UID of the user to a container UID by running podman create --uidmap $container_uid:0:1 --user $container_uid ....

Pods

这个 --uidmap 选项不能与 --pod 在Pod中时,不能在容器级别将选项设置为uidmap。

--ulimit = 选项

ULimit选项。您可以使用 host 从主机复制当前配置。

--umask = 无掩码

将无遮罩放入容器内。默认为 0022 。远程连接使用本地容器.conf作为默认设置

--unsetenv = env

取消设置容器的默认环境变量。默认环境变量包括由Podman本地提供的变量、由映像配置的环境变量和来自tainers.conf的环境变量。

--unsetenv-all

取消设置容器的所有默认环境变量。默认环境变量包括由Podman本地提供的变量、由映像配置的环境变量和来自tainers.conf的环境变量。

--user-u = user[:group]

设置所使用的用户名或UID,还可以设置指定命令的组名或GID。两者都有 usergroup 可以是符号的也可以是数字的。

如果没有此参数,该命令将以容器映像中指定的用户身份运行。除非被 USER 命令,或者通过传递给该选项的值,则该用户通常默认为根用户。

当未使用用户命名空间时,容器内和主机上使用的UID和GID匹配。但是,当使用用户命名空间时,容器中的UID和GID可能对应于主机上的另一个UID和GID。例如,在无根容器中,总是使用用户名称空间,默认情况下,容器中的根对应于调用Podman的用户的UID和GID。

--userns = mode

设置容器的用户命名空间模式。

如果 --userns 如果未设置,则按如下方式确定默认值。

  • 如果 --pod 已经设置好了, --userns 被忽略,并使用Pod的用户命名空间。

  • 如果环境变量 PODMAN_USERNS 则使用其值。

  • 如果 userns 中指定的 containers.conf 使用此值。

  • 否则, --userns=host 都是假定的。

--userns="" (即空字符串)是的别名 --userns=host

此选项与 --gidmap--uidmap--subuidname--subgidname

无根用户--userns=键映射:

钥匙

主机用户

容器用户

自动

$UID

NIL(主机用户UID未映射到容器。)

主机

$UID

0(默认用户帐户映射到容器中的根用户。)

保持ID

$UID

$UID(将用户帐户映射到容器内的相同UID。)

Keep-id:uid=200,gid=210

$UID

200:210(将用户帐户映射到容器内指定的UID、GID值。)

Nommap

$UID

NIL(主机用户UID未映射到容器。)

有效 mode 值包括:

auto [:OPTIONS,...] :自动创建唯一的用户命名空间。

这个 --userns=auto 标志要求用户名 containers 在/etc/subuid和/etc/subgid文件中指定,并允许Podman容器分配未使用的从属用户ID范围。参见子ID(5)。

示例: containers:2147483647:2147483648

Podman从分配唯一范围的UID和GID containers 从属用户ID。范围的大小基于映像中所需的UID数量。UID和GID的数量可以用 size 选择。

该选项 --userns=keep-id 使用用户的所有子ID和子ID。该选项 --userns=nomap 使用除用户自己的ID之外的用户的所有子ID和子ID。使用 --userns=auto 启动新容器时不起作用,只要启动时 --userns=keep-id--userns=nomap

有效 auto 选项:

  • gidmapping =CONTAINER_GID:HOST_GID:SIZE:强制在用户命名空间中存在GID映射。

  • size =SIZE:指定自动用户命名空间的显式大小。例如: --userns=auto:size=8192 。如果 size 未指定, auto 估计用户命名空间的大小。

  • uidmapping =CONTAINER_UID:HOST_UID:SIZE:强制在用户命名空间中存在UID映射。

容器: id:加入指定容器的用户命名空间。

host"" (空字符串):在调用方的用户命名空间中运行。容器中运行的进程与调用用户启动的任何其他进程在主机上具有相同的权限。

keep-id :创建一个用户命名空间,其中当前用户的UID:GID映射到容器中的相同值。对于由根创建的容器,当前映射被创建到新的用户名称空间。

有效 keep-id 选项:

  • uid =UID:覆盖用于将当前用户映射到的容器内的UID。

  • gid =GID:覆盖用于将当前用户映射到的容器内的GID。

nomap :创建一个用户命名空间,其中当前无根用户的UID:GID未映射到容器中。根用户创建的容器不允许使用此选项。

ns: NAMESPACE:在给定的现有用户命名空间中运行容器。

--uts = mode

设置容器的UTS命名空间模式。支持下列值:

  • host :在容器内使用宿主的UTS命名空间。

  • 私人 :为容器创建新的命名空间(默认)。

  • [ns:[path]] :在给定的现有UTS命名空间中运行容器。

  • [container:[container]] :加入指定容器的UTS命名空间。

--variant = VARIANT

使用 VARIANT 而不是容器映像的默认体系结构变体。某些映像可以使用ARM架构的多种变体,例如ARM/v5和ARM/v7。

--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会创建一个。如果未给出源,则该卷将创建为具有随机生成名称的匿名命名卷,并在通过 --rm 旗帜或 podman rm --volumes 指挥部。

(注意,当使用远程客户端时,包括Mac和Windows(不包括WSL2)计算机,卷从远程服务器挂载,而不一定是客户端计算机。)

这个 OPTIONS 是逗号分隔的列表,可以是: [1]

  • rw | ro

  • z | Z

  • [O]

  • [U]

  • [no] copy

  • [no] dev

  • [no] exec

  • [no] suid

  • [r] bind

  • [r] 共享 | [r] 奴隶 | [r] 私人 [r] 不可绑定

  • idmap [=options]

这个 CONTAINER-DIR 必须是绝对路径,如 /src/docs 。该卷将挂载到容器中的该目录下。

如果指定了卷源,则它必须是主机上的路径或命名卷的名称。主机路径可以是绝对路径或相对路径;相对路径是相对于运行Podman的目录进行解析的。如果源不存在,Podman将返回错误。用户必须预先创建源文件或目录。

任何不是以 ./ 被视为命名卷的名称。如果不存在具有该名称的卷,则会创建该卷。使用名称创建的卷不是匿名的,它们不会被 --rm 选项和 podman rm --volumes 指挥部。

指定多个 -v 将一个或多个卷装载到容器中的选项。

Write Protected Volume Mounts

增列 :ro:rw 分别以只读或读写模式装入卷的选项。默认情况下,卷以读写方式装载。请参见示例。

Chowning Volume Mounts

默认情况下,Podman不会更改装载到容器中的源卷目录的所有者和组。如果在新的用户命名空间中创建容器,则容器中的UID和GID可能对应于主机上的另一个UID和GID。

这个 :U Suffix告诉Podman根据容器内的UID和GID使用正确的主机UID和GID,以递归方式更改源卷的所有者和组。Chowning遍历卷下的文件系统并更改每个文件上的UID/GID,如果卷有数千个inode,则此过程需要很长时间,延迟了容器的启动。

Warning 请谨慎使用,因为这会修改主机文件系统。

Labeling Volume Mounts

像SELinux这样的标签系统要求在装载到容器中的卷内容上放置适当的标签。如果没有标签,安全系统可能会阻止容器内运行的进程使用内容。默认情况下,Podman不会更改操作系统设置的标签。

要在容器上下文中更改标签,请添加两个后缀之一 :z:Z 到卷装载。这些后缀告诉Podman重新标记共享卷上的文件对象。这个 z 选项告诉Podman两个或更多容器共享卷内容。因此,Podman使用共享内容标签来标记内容。共享卷标允许所有容器读/写内容。这个 Z 选项告诉Podman使用私有的非共享标签来标记内容,只有当前容器可以使用私有卷。重新标记会遍历卷下的文件系统并更改每个文件上的标签,如果卷有数千个inode,此过程将花费很长时间,从而延迟容器的启动。如果该卷以前已使用 z 选项,Podman经过优化,不会第二次重新标记。如果将文件移动到卷中,则可以使用 chcon -R container_file_t PATH 指挥部。

注:请勿重新标记系统文件和目录。重新标记系统内容可能会导致计算机上的其他受限服务失败。对于这些类型的容器,我们建议禁用SELinux分离。该选项 --security-opt label=disable 禁用容器的SELinux分离。例如,如果用户想要将其整个主目录卷装载到容器中,则需要禁用SELinux分离。

   $ podman create --security-opt label=disable -v $HOME:/home/user fedora touch /home/user/file

Overlay Volume Mounts

这个 :O 标志告诉Podman从主机挂载目录作为临时存储,使用 overlay file system 。容器进程可以修改安装点内的内容,该安装点存储在容器存储中的单独目录中。在重叠术语中,源目录位于较低位置,容器存储目录位于较高位置。当容器完成执行时,对挂载点的修改将被销毁,这与卸载tmpfs挂载点类似。

对于高级用户, overlay 选项还支持自定义非易失性 upperdirworkdir 用于覆盖坐骑。自定义 upperdirworkdir 可以完全由用户自己管理,Podman不会在生命周期完成时将其删除。示例 :O,upperdir=/some/upper,workdir=/some/work

容器的后续执行将看到原始的源目录内容,与以前的容器执行相比不再存在任何更改。

覆盖挂载的一个用例是将包缓存从主机共享到容器中,以加快构建速度。

注:

 - The `O` flag conflicts with other options listed above.

装载到容器中的内容被贴上私有标签。在SELinux系统上,源目录中的标签必须可由容器标签读取。通常,容器可以读取/执行 container_share_t 并且可以读/写 container_file_t 。如果无法更改源卷上的标签,则必须禁用SELinux容器分离才能使容器工作。-不要修改覆盖挂载到容器中的源目录,否则会导致意外失败。只有在容器运行完毕后才能修改目录。

Mounts propagation

默认情况下,绑定装载的卷是 private 。这意味着在容器内完成的任何装载在主机上不可见,反之亦然。可以通过指定卷装载传播属性来更改此行为。使卷共享在容器内的该卷下完成的装载在主机上可见,反之亦然。制作一本书 slave 仅启用单向装载传播,即在该卷下的主机上完成的装载在容器内可见,但反过来不可见。 [1]

要控制卷的装载传播属性,可以使用 [r] 共享 , [r] 奴隶 , [r] 私人 或者 [r] 不可绑定 传播标志。只能为绑定装载的卷指定传播属性,而不能为内部卷或命名卷指定传播属性。要使挂载传播工作,源挂载点(挂载源目录所在的挂载点)必须具有正确的传播属性。对于共享卷,源装载点必须是共享的。对于从卷,源装载点必须是共享的或从属的。 [1]

若要将卷及其所有子装载递归装载到容器中,请使用 rbind 选择。默认情况下,使用绑定选项,源目录的子挂载不会挂载到容器中。

使用以下命令装载卷 copy 选项告诉podman将内容从底层目标目录复制到新创建的内部卷。这个 copy 仅在最初创建卷时发生。随后在不同容器上使用该卷时,不会复制内容。这个 copy 选项在绑定装载上被忽略,并且不起作用。

使用装载卷 nosuid 选项意味着卷上的SUID可执行文件不能被应用程序用来更改其权限。默认情况下,使用装载卷 nosuid

使用装载卷 noexec 选项意味着卷上的任何可执行文件都不能在容器中执行。

使用装载卷 nodev 选项表示容器内的进程不能使用卷上的任何设备。默认情况下,使用装载卷 nodev

如果 HOST-DIR 是一个挂载点,那么 devsuid ,以及 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 /foomount --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的开始。此映射的长度在第三个值中给出。多个范围用#分隔。

使用 --group-add keep-groups 将用户的补充组访问权限传递到容器中的选项。

--volumes-from = CONTAINER[:OPTIONS]

从指定的容器装载卷。用于在容器之间共享卷。这个 选项 是一个逗号分隔的列表,其中包含以下可用元素:

  • rw | ro

  • z

将已装入的卷从一个源容器装载到另一个容器。 CONTAINER 可以是名称或ID。要共享卷,请在运行目标容器时使用--卷-From选项。即使源容器未运行,也可以共享卷。

默认情况下,Podman以与在源容器中装载卷相同的模式(读写或只读)装载卷。这可以通过添加一个 rorw option.

像SELinux这样的标签系统要求在装载到容器中的卷内容上放置适当的标签。如果没有标签,安全系统可能会阻止容器内运行的进程使用内容。默认情况下,Podman不会更改操作系统设置的标签。

要在容器上下文中更改标签,请添加 z 到卷装载。这个后缀告诉Podman重新标记共享卷上的文件对象。这个 z 选项告诉Podman两个实体共享卷内容。因此,Podman使用共享内容标签来标记内容。共享卷标允许所有容器读/写内容。

如果源容器中卷的位置与驻留在目标容器上的数据重叠,则该卷会将该数据隐藏在目标容器上。

--workdir-w = dir

容器内的工作目录。

在容器中运行二进制文件的默认工作目录是根目录( / )。图像开发人员可以使用WORKDIR指令设置不同的缺省值。操作员可以通过使用 -w 选项。

EXAMPLES

使用本地映像创建容器

$ podman create alpine ls

使用本地图像创建容器并对其进行注释

$ podman create --annotation HELLO=WORLD alpine ls

使用本地映像创建容器,分配一个伪TTY,保持stdin打开并将其命名为myctr

  podman create -t -i --name myctr alpine ls

在新用户命名空间中设置UID/GID映射

在新的用户命名空间中运行容器需要从主机映射UID和GID。

$ podman create --uidmap 0:30000:7000 --gidmap 0:30000:7000 fedora echo hello

设置自动用户命名空间分隔容器

# podman create --userns=auto:size=65536 ubi8-init

在容器中配置时区

$ podman create --tz=local alpine date
$ podman create --tz=Asia/Shanghai alpine date
$ podman create --tz=US/Eastern alpine date

添加依赖项容器

Podman确保在启动第二个容器(Tainer2)之前,第一个容器(Tainer1)正在运行。

$ podman create --name container1 -t -i fedora bash
$ podman create --name container2 --requires container1 -t -i fedora bash
$ podman start --attach container2

可能需要多个容器。

$ podman create --name container1 -t -i fedora bash
$ podman create --name container2 -t -i fedora bash
$ podman create --name container3 --requires container1,container2 -t -i fedora bash
$ podman start --attach container3

使用GLOB将容器内的共享库公开为只读

$ podman create --mount type=glob,src=/usr/lib64/libnvidia\*,ro -i -t fedora /bin/bash

配置保留补充组以访问卷

$ podman create -v /var/lib/design:/var/lib/design --group-add keep-groups ubi8

使用个性标志配置容器的执行域

$ podman create --name container1 --personality=LINUX32 fedora bash

创建一个容器,并将外部rootf挂载为覆盖

$ podman create --name container1 --rootfs /path/to/rootfs:O bash

使用静态IP创建连接到两个网络(名为net1和net2)的容器

$ podman create --network net1:ip=10.89.1.5 --network net2:ip=10.89.10.10 alpine ip addr

无根容器

Podman在大多数系统上以非根用户身份运行。此功能需要安装足够新版本的映像实用程序。卷影-utils程序包必须包括newuidmap和newgidmap可执行文件。

为了让用户在无根目录下运行,他们的用户名必须在/etc/subuid和/etc/subgid中有一个条目,该条目列出了他们的用户命名空间的UID。

如果安装了fuse-overlayfs和slrp4netns包,则无根Podman运行得更好。FUSE-overlayfs包提供了一个用户空间覆盖存储驱动程序,否则用户需要使用VFS存储驱动程序,该驱动程序的磁盘空间可能比较昂贵,性能也不如其他驱动程序。

要在容器上启用VPN,需要指定glirp4netns或appa;如果不指定两者,则需要使用--network=host标志运行容器。

ENVIRONMENT

容器内的环境变量可以使用多个不同的选项进行设置:本节介绍优先顺序。

优先顺序(较晚的条目覆盖较早的条目):

  • --env-host :添加了执行Podman的进程的宿主环境。

  • --http-proxy :默认情况下,从主机传入几个环境变量,例如 http_proxyno_proxy 。看见 --http-proxy 了解更多细节。

  • 容器映像:容器映像中指定的任何环境变量。

  • --env-file :通过env文件指定的任何环境变量。如果指定了多个文件,则它们将按条目顺序相互覆盖。

  • --env :任何指定的环境变量都会覆盖以前的设置。

创建容器并设置以 *. 拖后腿 * 只有在未指定值的情况下,GLOB功能才处于活动状态:

$ export ENV1=a
$ podman create --name ctr1 --env 'ENV*' alpine env
$ podman start --attach ctr1 | grep ENV
ENV1=a
$ podman create --name ctr2 --env 'ENV*=b' alpine env
$ podman start --attach ctr2 | grep ENV
ENV*=b

CONMON

当Podman启动一个容器时,它实际上执行conmon程序,该程序然后执行OCI运行时。康蒙是集装箱监控器。这是一个小程序,它的工作是查看容器的主进程,如果容器死了,保存退出代码。它还可以打开容器的TTY,以便以后可以连接到容器上。这就是为什么波德曼可以在分离模式下运行(背景),所以波德曼可以退出,但召唤继续运行。每个容器都有自己的COMON实例。Conmon等待容器退出,收集并保存退出代码,然后启动Podman进程,通过关闭网络和存储来完成容器清理。有关conmon的更多信息,请参见conmon(8)手册页。

FILES

/etc/subuid /etc/subgid

注意:使用环境变量 TMPDIR 更改下载的容器图像的临时存储位置。Podman默认使用 /var/tmp

另请参阅

podman(1)podman-save(1)podman-ps(1)podman-attach(1)podman-pod-create(1)podman-port(1)podman-start(1)podman-kill(1)podman-stop(1)podman-generate-systemd(1)podman-rm(1)subgid(5)subuid(5)containers.conf(5)systemd.unit(5)setsebool(8)slirp4netns(1)pasta(1)fuse-overlayfs(1)proc(5)conmon(8)personality(2)

HISTORY

2017年10月,Dan Walsh为Podman将Docker文档转换为Podman <dwalsh@redhat.com>

2014年11月,Sven Dowideit更新 <SvenDowideit@home.org.au>

2014年9月,Sven Dowideit更新 <SvenDowideit@home.org.au>

2014年8月,由Sven Dowideit更新 <SvenDowideit@home.org.au>

FOOTNOTES

<a name=“Footnote 1”>1:Podman项目致力于包容性,这是开源的核心价值。这个 masterslave 这里使用的装载传播术语有问题且容易引起分歧,需要更改。然而,这些术语目前在Linux内核中使用,目前必须按原样使用。当内核维护人员纠正这种用法时,Podman会立即效仿。