名称¶
podman-farm-build - 在农场节点上构建镜像,然后将其捆绑成一个清单列表
简介¶
podman farm build [options] [context]
描述¶
podman farm build 在农场的所有节点上构建一个镜像,并将其捆绑成一个清单列表。它使用给定的 Containerfile 在农场节点上执行 podman build 命令。一旦镜像在所有农场节点上构建完成,这些镜像将被推送到通过 --tag 标志指定的注册表。一旦所有镜像都被推送,将本地创建一个清单列表,并将其也推送到注册表。
清单列表将包含农场中每种原生架构类型的一个镜像。
此命令的主要功能是创建多架构构建,这比使用 podman build --arch --platform 通过仿真进行构建要快。
如果未指定农场,构建将被发送到 podman system connection 已知的所有节点。
注意:由于构建的镜像直接推送到注册表,用户必须使用 --tag 选项以 registry/repository/imageName[:tag]` 的格式传入完整的镜像名称。
选项¶
--add-host=hostname[;hostname[;…]]:ip¶
向容器的 /etc/hosts 文件中添加一个自定义的主机到 IP 的映射。
该选项接受一个或多个以分号分隔的主机名,这些主机名将映射到单个 IPv4 或 IPv6 地址,以冒号分隔。它还可以用于覆盖 Podman 默认添加到 /etc/hosts 的主机名 IP 地址(另请参阅 --name 和 --hostname 选项)。此选项可以多次指定,以向 /etc/hosts 添加额外的映射。它与 --no-hosts 选项冲突,并与 containers.conf 中的 no_hosts=true 冲突。
除了 IP 地址,还可以指定特殊标志 host-gateway。它解析为容器可以用来连接到主机的 IP 地址。选择的 IP 地址取决于您的网络设置,因此 Podman 无法保证自动确定 host-gateway 地址,这会导致 Podman 失败并显示错误消息。您可以使用 containers.conf 中的 host_containers_internal_ip 选项覆盖此 IP 地址。
Podman 还使用 host-gateway 地址自动将 host.containers.internal 和 host.docker.internal 主机名添加到 /etc/hosts。您可以通过提供 --no-hosts 选项或在 containers.conf 中设置 host_containers_internal_ip=”none” 来阻止此操作。如果未手动配置 host-gateway 地址,并且 Podman 无法自动确定 IP 地址,Podman 将静默跳过将这些内部主机名添加到 /etc/hosts。如果 Podman 在使用 podman machine 运行的虚拟机中(包括 Mac 和 Windows 主机),除非手动配置了 IP 地址,否则 Podman 将静默跳过将内部主机名添加到 /etc/hosts;内部主机名将由 gvproxy DNS 解析器解析。
Podman 默认将使用主机的 /etc/hosts 文件作为基础,即该文件中存在的任何主机名也将存在于容器的 /etc/hosts 文件中。可以使用 containers.conf 中的 base_hosts_file 配置来配置不同的基础文件。
--annotation=annotation=value¶
向镜像元数据中添加一个镜像注解(例如 annotation=value)。可以多次使用。
注意:此信息在 Docker 镜像格式中不存在,因此在以 Docker 格式写入镜像时会被丢弃。
--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=path 来完成。
--build-arg=arg=value¶
指定一个构建参数及其值,其插值方式与 Containerfiles 中读取的指令中的环境变量相同,但不会添加到生成的镜像配置中的环境变量列表中。
--build-arg-file=path¶
指定一个文件,其中包含形式为 arg=value 的构建参数行。建议的文件名为 argfile.conf。
以 # 开头的注释行以及空行将被忽略。所有其他行必须是传递给 --build-arg 的 arg=value 格式。
如果通过 --build-arg-file 和 --build-arg 选项提供了多个参数,则构建参数将在所有提供的文件和命令行参数之间合并。
在读取通过 --build-arg 选项提供的参数之前,会读取 --build-arg-file 选项中提供的任何文件。
当给定参数名称多次指定时,最后一个实例是传递给最终构建的实例。这意味着 --build-arg 的值总是覆盖 --build-arg-file 中的值。
--build-context=name=value¶
使用其简称及其位置指定一个额外的构建上下文。额外的构建上下文可以像我们在 COPY 指令中访问不同阶段一样引用。
有效值为:
本地目录——例如 --build-context project2=../path/to/project2/src(此选项不适用于远程 Podman 客户端。在 Podman 机器设置(即 macOS 和 Windows)上,路径必须存在于机器虚拟机上)
tarball 的 HTTP URL——例如 --build-context src=https://example.org/releases/src.tar
容器镜像——以 container-image:// 前缀指定,例如 --build-context alpine=container-image://alpine:3.15,(也接受 docker://, docker-image://)
在 Containerfile 方面,在所有接受“from”参数的命令上引用构建上下文。这可能看起来像
FROM [name]
COPY --from=[name] ...
RUN --mount=from=[name] …
[name] 的值与以下优先级顺序匹配
使用 --build-context [name]=.. 定义的命名构建上下文
在 Containerfile 中使用 AS [name] 定义的阶段
镜像 [name],无论是本地的还是远程注册表中的
--cache-from=image¶
用作潜在缓存源的仓库。当指定时,Buildah 会尝试在指定的仓库中查找缓存镜像,并尝试拉取缓存镜像,而不是实际在本地执行构建步骤。Buildah 仅在它们被认为是有效缓存命中时才尝试拉取先前缓存的镜像。
使用 --cache-to 选项使用缓存内容填充远程仓库。
示例
# populate a cache and also consult it
buildah build -t test --layers --cache-to registry/myrepo/cache --cache-from registry/myrepo/cache .
注意:除非指定了 --layers,否则 --cache-from 选项将被忽略。
--cache-to=image¶
设置此标志以指定用于存储缓存镜像的远程仓库。Buildah 尝试将新构建的缓存镜像推送到远程仓库。
注意:使用 --cache-from 选项以使用远程仓库中的缓存内容。
示例
# populate a cache and also consult it
buildah build -t test --layers --cache-to registry/myrepo/cache --cache-from registry/myrepo/cache .
注意:除非指定了 --layers,否则 --cache-to 选项将被忽略。
--cache-ttl¶
限制缓存镜像的使用,仅考虑创建时间戳在 duration 之前的镜像。例如,如果指定 --cache-ttl=1h,Buildah 会考虑在一小时内创建的中间缓存镜像,并忽略超出此持续时间的中间缓存镜像。
注意:手动设置 --cache-ttl=0 在实现上等同于使用 --no-cache,因为这意味着用户根本不想使用缓存。
--cap-add=CAP_xxx¶
执行 RUN 指令时,运行指令中指定的命令,并将其功能集中添加指定的功能。某些功能默认授予;此选项可用于添加更多功能。
--cap-drop=CAP_xxx¶
执行 RUN 指令时,运行指令中指定的命令,并将其功能集中删除指定的功能。默认授予 CAP_CHOWN、CAP_DAC_OVERRIDE、CAP_FOWNER、CAP_FSETID、CAP_KILL、CAP_NET_BIND_SERVICE、CAP_SETFCAP、CAP_SETGID、CAP_SETPCAP 和 CAP_SETUID 功能;此选项可用于删除它们。
如果一个功能同时指定给 --cap-add 和 --cap-drop 选项,则无论选项的给定顺序如何,它都将被删除。
--cert-dir=path¶
使用 path 中的证书(*.crt、*.cert、*.key)连接到注册表。(默认值:/etc/containers/certs.d)有关详细信息,请参阅 containers-certs.d(5)。(此选项不适用于远程 Podman 客户端,包括 Mac 和 Windows(不包括 WSL2)机器)
--cgroup-parent=path¶
创建 cgroup 的 cgroup 路径。如果路径不是绝对路径,则该路径被视为相对于 init 进程的 cgroup 路径。如果 cgroup 不存在,则会创建它们。
--cgroupns=how¶
设置处理 RUN 指令时 cgroup 命名空间的配置。配置值可以是“” (空字符串) 或 “private” 以指示创建新的 cgroup 命名空间,也可以是 “host” 以指示重用 buildah 本身正在运行的 cgroup 命名空间。
--cleanup¶
成功时从农场节点删除构建的镜像(默认值:false)。
--compat-volumes¶
处理使用 VOLUME 指令(在此构建中以及从基础镜像继承的指令)标记的目录,使其内容只能由 ADD 和 COPY 指令修改。RUN 指令在这些位置所做的任何更改都将被恢复。在此选项引入之前,此行为是默认行为,但现在默认禁用。
--cpp-flag=flags¶
设置要传递给 C 预处理器 cpp(1) 的附加标志。以“.in”后缀结尾的 Containerfiles 将通过 cpp(1) 进行预处理。此选项可用于将附加标志传递给 cpp。注意:您还可以通过设置 BUILDAH_CPPFLAGS 环境变量来设置默认的 CPPFLAGS(例如,export BUILDAH_CPPFLAGS=”-DDEBUG”)。
--cpu-period=limit¶
为完全公平调度器(CFS)设置 CPU 周期,这是一个以微秒为单位的时长。一旦容器的 CPU 配额用尽,它将不会被调度运行,直到当前周期结束。默认为 100000 微秒。
在某些系统上,非 root 用户可能不允许更改资源限制。更多详情,请参阅 https://github.com/containers/podman/blob/main/troubleshooting.md#26-running-containers-with-resource-limits-fails-with-a-permissions-error
在 cgroups V1 的无根(rootless)系统上不支持此选项。
--cpu-quota=limit¶
限制 CPU 完全公平调度器(CFS)的配额。
限制容器的 CPU 使用率。默认情况下,容器以全部 CPU 资源运行。限制以微秒为单位。如果提供了数字,则容器被允许使用那么多 CPU 时间,直到 CPU 周期结束(可通过 --cpu-period 控制)。
在某些系统上,非 root 用户可能不允许更改资源限制。更多详情,请参阅 https://github.com/containers/podman/blob/main/troubleshooting.md#26-running-containers-with-resource-limits-fails-with-a-permissions-error
在 cgroups V1 的无根(rootless)系统上不支持此选项。
--cpuset-cpus=number¶
允许执行的 CPU。可以指定为逗号分隔的列表(例如 0,1),范围(例如 0-3),或两者的任意组合(例如 0-3,7,11-15)。
在某些系统上,非 root 用户可能不允许更改资源限制。更多详情,请参阅 https://github.com/containers/podman/blob/main/troubleshooting.md#26-running-containers-with-resource-limits-fails-with-a-permissions-error
在 cgroups V1 的无根(rootless)系统上不支持此选项。
--cpuset-mems=nodes¶
允许执行的内存节点(MEMs)(0-3, 0,1)。仅在 NUMA 系统上有效。
如果系统上有四个内存节点(0-3),使用 --cpuset-mems=0,1,则容器中的进程将只使用前两个内存节点的内存。
在某些系统上,非 root 用户可能不允许更改资源限制。更多详情,请参阅 https://github.com/containers/podman/blob/main/troubleshooting.md#26-running-containers-with-resource-limits-fails-with-a-permissions-error
在 cgroups V1 的无根(rootless)系统上不支持此选项。
--created-annotation¶
向镜像元数据添加一个镜像 annotation(另请参阅 --annotation),将“org.opencontainers.image.created”设置为当前时间,如果使用了 --source-date-epoch 或 --timestamp 标志,则设置为指定的时间戳。如果为 false,则生成的镜像中不会存在此类 annotation。
注意:此信息在 Docker 镜像格式中不存在,因此在以 Docker 格式写入镜像时会被丢弃。
--creds=[username[:password]]¶
用于向镜像仓库进行身份验证的 [username[:password]](如果需要)。如果未提供一个或两个值,则会出现命令行提示,可以输入该值。密码输入时无回显。
请注意,指定的凭据仅用于针对目标注册表进行身份验证。它们不用于镜像或注册表被重写时(请参阅 containers-registries.conf(5));要针对这些进行身份验证,请考虑使用 containers-auth.json(5) 文件。
--decryption-key=key[:passphrase]¶
用于解密镜像的 [key[:passphrase]]。Key 可以指向密钥和/或证书。会尝试使用所有密钥进行解密。如果密钥受密码短语保护,则必须在参数中传递它,否则省略。
--device=host-device[:container-device][:permissions]¶
向容器添加一个主机设备。其格式为 HOST-DEVICE[:CONTAINER-DEVICE][:PERMISSIONS],其中 HOST-DEVICE 是主机上设备节点的路径,CONTAINER-DEVICE 是容器中设备节点的路径,PERMISSIONS 是一个权限列表,由 'r' (读取)、'w' (写入) 和 'm' (mknod(2)) 组合而成。
示例:--device=/dev/sdc:/dev/xvdc:rwm。
注意:如果 host-device 是一个符号链接,则会首先解析它。容器只存储主机设备的主设备号和次设备号。
Podman 可能会加载使用指定设备所需的内核模块。Podman 在必要时加载模块的设备是:/dev/fuse。
在无根模式下,新设备从主机绑定挂载到容器中,而不是 Podman 在容器空间内创建它。由于绑定挂载在 SELinux 系统上保留其 SELinux 标签,因此容器在访问挂载设备时可能会遇到权限被拒绝的情况。修改 SELinux 设置以允许容器通过以下命令使用所有设备标签
$ sudo setsebool -P container_use_devices=true
注意:如果用户仅通过组具有访问权限,则从无根容器内部访问设备将失败。crun(1) 运行时通过添加选项 --annotation run.oci.keep_original_groups=1 来提供一个解决方法。
--disable-compression, -D¶
在构建镜像时不压缩文件系统层,除非目标写入位置要求压缩。这是默认设置,因为镜像层在推送到注册表时会自动压缩,而写入本地存储的镜像只需再次解压缩即可存储。在所有情况下,都可以通过指定 --disable-compression=false 来强制压缩。
--dns=ipaddr¶
设置自定义 DNS 服务器。
此选项可用于覆盖传递给容器的 DNS 配置。通常,当主机 DNS 配置对容器无效时(例如,127.0.0.1),这是必需的。在这种情况下,每次运行都需要 --dns 标志。
可以指定特殊值 none 来禁止 Podman 在容器中创建 /etc/resolv.conf。然后,镜像中的 /etc/resolv.conf 文件将不加修改地使用。
请注意,**ipaddr** 可以直接添加到容器的 /etc/resolv.conf 中。但这并不能保证。例如,将 dns_enabled 设置为 true 的自定义网络传递给 --network 将导致 /etc/resolv.conf 仅引用 aardvark-dns 服务器。然后 aardvark-dns 将所有非容器名称查询转发到提供的 ipaddr。
此选项不能与设置为 none 的 --network 结合使用。
注意:此选项仅在构建过程中的 RUN 指令期间生效。它不会影响最终镜像中的 /etc/resolv.conf。
--dns-option=option¶
设置在构建期间使用的自定义 DNS 选项。
--dns-search=domain¶
设置在构建期间使用的自定义 DNS 搜索域。
--env=env[=value]¶
向构建的镜像添加一个值(例如 env=value)。可以多次使用。如果既未指定 = 也未指定 value,但 env 在当前环境中已设置,则将当前环境中的值添加到镜像中。
要从构建的镜像中删除环境变量,请使用 --unsetenv 选项。
--farm¶
此选项指定构建过程中要使用的农场名称。
此选项指定构建过程中要使用的农场名称。
--file, -f=Containerfile¶
指定一个包含构建镜像指令的 Containerfile,可以是本地文件或 http 或 https URL。如果指定了多个 Containerfile,则只接受最后一个指定文件中的 FROM 指令。
如果未指定构建上下文,并且至少有一个 Containerfile 是本地文件,则其所在的目录将用作构建上下文。
指定选项 -f - 会导致从标准输入读取 Containerfile 内容。
--force-rm¶
总是在构建后移除中间容器,即使构建失败也是如此(默认为 true)。
--format¶
控制构建的镜像的清单和配置数据的格式。可识别的格式包括 oci(OCI 镜像规范 v1.0,默认)和 docker(版本 2,使用模式格式 2 作为清单)。
注意:您还可以通过设置 BUILDAH_FORMAT 环境变量来覆盖默认格式。 export BUILDAH_FORMAT=docker
--from¶
覆盖 Containerfile 中的第一个 FROM 指令。如果 Containerfile 中有多个 FROM 指令,则只更改第一个。
对于远程 podman 客户端,并非所有容器传输都能按预期工作。例如,oci-archive:/x.tar 引用的是远程机器上的 /x.tar,而不是客户端上的。使用 podman 远程客户端时,最好将使用限制为 containers-storage 和 docker:// transports。
--group-add=group | keep-groups¶
为在容器进程内运行的主用户分配额外的组。
keep-groups是一个特殊标志,告诉 Podman 保留补充组访问权限。
允许容器使用用户的补充组访问。如果文件系统或设备只能由无根用户的组访问,此标志会告诉 OCI 运行时将组访问权限传递到容器中。目前仅适用于 crun OCI 运行时。注意:keep-groups 是排他性的,不能使用此标志指定其他组。(不适用于远程命令,包括 Mac 和 Windows(不包括 WSL2)机器)
--help, -h¶
打印用法说明
--hooks-dir=path¶
路径中的每个 *.json 文件都配置了一个 buildah 构建容器的钩子。有关 JSON 文件的语法和钩子注入语义的更多详细信息。Buildah 目前支持 1.0.0 和 0.1.0 两种钩子模式,尽管 0.1.0 模式已弃用。
此选项可以多次设置;后来的选项的路径具有更高的优先级。
对于注释条件,buildah 使用生成的 OCI 配置中设置的任何注释。
对于绑定挂载条件,只考虑调用者通过 --volume 明确请求的挂载。buildah 默认插入的绑定挂载(例如 /dev/shm)不予考虑。
如果根调用者的 --hooks-dir 未设置,Buildah 目前默认为 /usr/share/containers/oci/hooks.d 和 /etc/containers/oci/hooks.d,按优先级递增的顺序。使用这些默认值已弃用。请迁移到明确设置 --hooks-dir。
--http-proxy¶
默认情况下,如果 Podman 进程设置了代理环境变量,则会将它们传递到容器中。可以通过将值设置为 false 来禁用此功能。传递的环境变量包括 http_proxy、https_proxy、ftp_proxy、no_proxy,以及这些变量的大写版本。此选项仅在主机系统必须使用代理但容器不使用任何代理时才需要。以任何其他方式为容器指定的代理环境变量将覆盖从主机传递的值。(为容器指定代理的其他方式包括使用 --env 标志传递值,或在容器构建时硬编码代理环境。)与远程客户端一起使用时,它使用服务器进程上设置的代理环境变量。
默认为 true。
--identity-label¶
如果设置,添加默认身份标签 io.buildah.version。(默认值为 true)。
--ignorefile¶
备用 .containerignore 文件的路径。
--iidfile=ImageIDfile¶
将构建的镜像 ID 写入文件。当多次指定 --platform 时,尝试使用此选项会触发错误。
--inherit-annotations=bool-value¶
从基础镜像或基础阶段继承注释。(默认值为 true)。将此标志设置为 false 的用例可能还需要对 --created-annotation 标志执行相同的操作。
--inherit-labels¶
从基础镜像或基础阶段继承标签。(默认值为 true)。
--ipc=how¶
设置处理 RUN 指令时 IPC 命名空间的配置。配置值可以是“” (空字符串) 或 “container” 以指示创建新的 IPC 命名空间,也可以是 “host” 以指示重用 podman 本身正在运行的 IPC 命名空间,或者它可以是已由另一个进程使用的 IPC 命名空间的路径。
--isolation=type¶
控制在运行 RUN 指令时用于运行进程的隔离类型。识别的类型包括 oci (OCI 兼容运行时,默认)、rootless (使用修改后的配置和启用其 --rootless 选项调用的 OCI 兼容运行时,并在其 create 调用中添加 --no-new-keyring --no-pivot,禁用网络和 UTS 命名空间,启用 IPC、PID 和用户命名空间;非特权用户的默认设置) 和 chroot (一个内部包装器,更倾向于 chroot(1) 而非容器技术)。
注意:您还可以通过设置 BUILDAH_ISOLATION 环境变量来覆盖默认隔离类型。 export BUILDAH_ISOLATION=oci
--jobs=number¶
并行运行多达 N 个并发阶段。如果作业数大于 1,则从 /dev/null 读取标准输入。如果指定为 0,则并行运行的作业数没有限制。
--label=label¶
向镜像元数据添加一个镜像标签(例如 label=value)。可以多次使用。
用户可以在 Containerfile 中设置一个特殊的 LABEL io.containers.capabilities=CAP1,CAP2,CAP3,指定容器正常运行所需的 Linux 功能列表。容器镜像中指定的此标签告诉 Podman 仅使用这些功能运行容器。Podman 仅使用指定的功能启动容器,前提是此功能列表是默认列表的子集。
如果指定的权能不在默认集合中,Podman 会打印一条错误消息,并使用默认的权能运行容器。
--layer-label=label[=value]¶
向中间镜像元数据添加一个中间镜像 label(例如 label=value)。它可以多次使用。
如果 label 已命名,但既未提供 = 也未提供 value,则将 label 设置为空值。
--layers¶
在构建过程中缓存中间镜像(默认值为 true)。
注意:您还可以通过设置 BUILDAH_LAYERS 环境变量来覆盖层的默认值。 export BUILDAH_LAYERS=true
--local, -l¶
在本地机器和农场节点上构建镜像。
--logfile=filename¶
将发送到标准输出和标准错误的日志输出写入指定文件,而不是标准输出和标准错误。此选项在远程客户端上不受支持,包括 Mac 和 Windows(不包括 WSL2)机器。
--memory, -m=number[unit]¶
内存限制。unit 可以是 b (字节),k (千字节),m (兆字节),或 g (吉字节)。
允许限制容器可用的内存。如果主机支持交换内存,则 --m 内存设置可以大于物理 RAM。如果指定限制为 0(不使用 --m),则容器的内存不受限制。实际限制可能会向上取整到操作系统页面大小的倍数(该值非常大,即数万亿)。
在 cgroups V1 的无根(rootless)系统上不支持此选项。
--memory-swap=number[unit]¶
一个等于内存加交换空间的限制值。unit 可以是 b (字节),k (千字节),m (兆字节),或 g (吉字节)。
必须与 -m (--memory) 标志一起使用。参数值必须大于 -m (--memory) 的值。默认情况下,它被设置为 --memory 值的两倍。
将 number 设置为 -1 以启用无限制的交换空间。
在 cgroups V1 的无根(rootless)系统上不支持此选项。
--network=mode, --net¶
设置处理 RUN 指令时网络命名空间的配置。
有效的 mode 值为:
none:无网络。
host:使用 Podman 主机网络栈。注意:host 模式赋予容器对本地系统服务(如 D-bus)的完全访问权限,因此被认为是不安全的。
ns:path:要加入的网络命名空间的路径。
private:为容器创建一个新的命名空间(默认)
<network name|ID>: 加入给定名称或 ID 的网络,例如使用
--network mynet加入名为 mynet 的网络。仅支持有根用户。slirp4netns[:OPTIONS,...]: 使用 slirp4netns(1) 创建用户网络栈。可以指定这些附加选项,也可以在 containers.conf 中使用
network_cmd_options设置allow_host_loopback=true|false:允许 slirp4netns 访问主机回环 IP(默认为 10.0.2.2 或当更改 slirp4netns 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:指定 slirp 绑定的出站接口(仅限 ipv4 流量)。
outbound_addr=IPv4:指定 slirp 绑定的出站 ipv4 地址。
outbound_addr6=INTERFACE:指定 slirp 绑定的出站接口(仅限 ipv6 流量)。
outbound_addr6=IPv6:指定 slirp 绑定的出站 ipv6 地址。
pasta[:OPTIONS,…]:使用 pasta(1) 创建一个用户模式的网络栈。
这是无根容器的默认设置,并且仅在无根模式下受支持。
默认情况下,IPv4 和 IPv6 地址和路由,以及 pod 接口名称,都从主机复制。如果未配置端口转发,则当任一侧(init 命名空间或容器命名空间)绑定服务时,端口会动态转发。端口转发保留原始源 IP 地址。pasta(1) 中描述的选项可以作为逗号分隔的参数指定。
在 pasta(1) 选项方面,默认情况下给出 --config-net,以便在容器启动时配置网络,并且默认情况下也假定 --no-map-gw,以避免容器直接使用网关地址访问主机。后者可以通过在 pasta 特定选项中传递 --map-gw 来覆盖(尽管它不是实际的 pasta(1) 选项)。
此外,还传递 -t none 和 -u none 以禁用基于绑定端口的自动端口转发。类似地,传递 -T none 和 -U none 以禁用从容器到主机的相同功能。
一些示例:pasta:--map-gw:允许容器使用网关地址直接访问主机。
pasta:--mtu,1500:为容器中的 tap 接口指定一个 1500 字节的 MTU。
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,等同于默认的 slirp4netns(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,等同于带有 Podman 覆盖的默认 slirp4netns(1) 选项:与上面相同,但将 MTU 保留为 65520 字节
pasta:-t,auto,-u,auto,-T,auto,-U,auto:启用基于从主机和容器两侧观察到的绑定端口的自动端口转发
pasta:-T,5201:启用从容器到主机的 TCP 端口 5201 的转发,使用回环接口而不是 tap 接口以提高性能
--no-cache¶
不要使用现有缓存镜像进行容器构建。从头开始使用一组新的缓存层进行构建。
--no-hostname¶
不在容器中创建 /etc/hostname 文件。
默认情况下,Podman 管理 /etc/hostname 文件,添加容器自己的主机名。当设置 --no-hostname 选项时,如果镜像的 /etc/hostname 文件存在,它将保持不变。
--no-hosts¶
不修改容器中的 /etc/hosts 文件。
Podman 默认控制容器的 /etc/hosts 文件,并为容器的名称(请参阅 --name 选项)和主机名(请参阅 --hostname 选项)、内部 host.containers.internal 和 host.docker.internal 主机,以及使用 --add-host 选项添加的任何主机名添加条目。有关详细信息,请参阅 --add-host 选项。传递 --no-hosts 将禁用此功能,从而保持镜像的 /etc/hosts 文件未修改。通过在 containers.conf 中设置 no_hosts=true 也可以全局实现相同的效果。
此选项与 --add-host 冲突。
--omit-history¶
省略构建的镜像中的构建历史信息。(默认值为 false)。
此选项适用于最终用户明确希望设置 --omit-history 以省略构建镜像中可选 History 的情况,或在处理使用不包含 History 信息的构建工具构建的镜像时。
--os-feature=feature¶
设置所构建镜像所需操作系统 feature 的名称。默认情况下,如果镜像不是基于 scratch,则保留基础镜像所需的 OS 功能列表(如果基础镜像指定了任何功能)。此选项通常仅在镜像的操作系统是 Windows 时才有意义。
如果 feature 带有尾随的 -,则从镜像中列出的所需功能集中删除该 feature。
--os-version=version¶
设置所构建镜像的精确所需操作系统 version。默认情况下,如果镜像不是基于 scratch,则保留基础镜像所需的 OS 版本(如果基础镜像指定了版本)。此选项通常仅在镜像的操作系统是 Windows 时才有意义,并且通常在 Windows 基础镜像中设置,因此使用此选项通常是不必要的。
--pid=pid¶
设置处理 RUN 指令时 PID 命名空间的配置。配置值可以是“” (空字符串) 或 “container” 以指示创建新的 PID 命名空间,也可以是 “host” 以指示重用 podman 本身正在运行的 PID 命名空间,或者它可以是已由另一个进程使用的 PID 命名空间的路径。
--platforms=p1,p2,p3...¶
仅在与给定平台匹配的农场节点上构建。
--pull=policy¶
拉取镜像策略。默认为 missing。
always:总是拉取镜像,如果拉取失败则抛出错误。
missing: 仅当本地容器存储中不存在镜像时才拉取镜像。如果找不到镜像且拉取失败,则抛出错误。
never: 从不拉取镜像,但使用本地容器存储中的镜像。如果找不到镜像,则抛出错误。
newer: 如果注册表上的镜像比本地容器存储中的镜像新,则拉取。当摘要不同时,镜像被认为是更新的。比较时间戳容易出错。如果找到了本地镜像,则会抑制拉取错误。
--quiet, -q¶
抑制指示正在处理哪个指令的输出消息,以及从注册表拉取镜像和写入输出镜像时的进度。
--retry=attempts¶
在仓库和本地存储之间拉取或推送镜像失败时重试的次数。默认为 3。
--retry-delay=duration¶
在注册表和本地存储之间拉取或推送镜像失败时,重试尝试之间的延迟持续时间。默认是从两秒开始,然后指数退避。当设置此值时使用此延迟,并且不会发生指数退避。
--rewrite-timestamp¶
为镜像生成新层时,确保新添加的内容的时间戳不晚于 --source-date-epoch 标志所使用的值(如果提供了该标志),方法是用该值替换任何晚于该值的时间戳。
--rm¶
成功构建后删除中间容器(默认值为 true)。
--runtime=path¶
用于运行 RUN 指令指定命令的备用 OCI 兼容运行时 path。
注意:您还可以通过设置 BUILDAH_RUNTIME 环境变量来覆盖默认运行时。 export BUILDAH_RUNTIME=/usr/local/bin/runc
--runtime-flag=flag¶
添加容器运行时的全局标志。要列出支持的标志,请查阅所选容器运行时的手册页。
注意:不要将前导 -- 传递给标志。要将 runc 标志 --log-format json 传递给 buildah build,给定的选项是 --runtime-flag log-format=json。
--sbom=preset¶
通过使用指定的扫描器镜像、扫描器命令和合并策略组合扫描工作容器和构建上下文,为输出镜像生成 SBOM(软件物料清单)。必须与一个或多个 --sbom-image-output、--sbom-image-purl-output、--sbom-output 和 --sbom-purl-output 一起指定。可识别的预设及其等效选项集
“syft”、“syft-cyclonedx”:--sbom-scanner-image=ghcr.io/anchore/syft --sbom-scanner-command=”/syft scan -q dir:{ROOTFS} --output cyclonedx-json={OUTPUT}” --sbom-scanner-command=”/syft scan -q dir:{CONTEXT} --output cyclonedx-json={OUTPUT}” --sbom-merge-strategy=merge-cyclonedx-by-component-name-and-version
“syft-spdx”:--sbom-scanner-image=ghcr.io/anchore/syft --sbom-scanner-command=”/syft scan -q dir:{ROOTFS} --output spdx-json={OUTPUT}” --sbom-scanner-command=”/syft scan -q dir:{CONTEXT} --output spdx-json={OUTPUT}” --sbom-merge-strategy=merge-spdx-by-package-name-and-versioninfo
“trivy”、“trivy-cyclonedx”:--sbom-scanner-image=ghcr.io/aquasecurity/trivy --sbom-scanner-command=”trivy filesystem -q {ROOTFS} --format cyclonedx --output {OUTPUT}” --sbom-scanner-command=”trivy filesystem -q {CONTEXT} --format cyclonedx --output {OUTPUT}” --sbom-merge-strategy=merge-cyclonedx-by-component-name-and-version
“trivy-spdx”:--sbom-scanner-image=ghcr.io/aquasecurity/trivy --sbom-scanner-command=”trivy filesystem -q {ROOTFS} --format spdx-json --output {OUTPUT}” --sbom-scanner-command=”trivy filesystem -q {CONTEXT} --format spdx-json --output {OUTPUT}” --sbom-merge-strategy=merge-spdx-by-package-name-and-versioninfo
--sbom-image-output=path¶
生成 SBOM 时,将生成的 SBOM 存储在输出镜像中指定的路径中。没有默认值。
--sbom-image-purl-output=path¶
生成 SBOM 时,扫描它们以获取 PURL (包 URL) 信息,并将找到的 PURL 列表保存到输出镜像中指定的路径。没有默认值。
--sbom-merge-strategy=method¶
如果正在使用多个 --sbom-scanner-command 值,则使用指定的方法将后续命令的输出与先前命令的输出合并。可识别的值包括
cat 连接文件。
merge-cyclonedx-by-component-name-and-version 合并 JSON 文档的“component”字段,忽略当“name”和“version”值的组合已存在时来自文档的值。文档按其生成顺序进行处理,即生成它们的命令的指定顺序。
merge-spdx-by-package-name-and-versioninfo 合并 JSON 文档的“package”字段,忽略当“name”和“versionInfo”值的组合已存在时来自文档的值。文档按其生成顺序进行处理,即生成它们的命令的指定顺序。
--sbom-output=file¶
生成 SBOM 时,将生成的 SBOM 存储在本地文件系统中指定的文件中。没有默认值。
--sbom-purl-output=file¶
生成 SBOM 时,扫描它们以获取 PURL (包 URL) 信息,并将找到的 PURL 列表保存到本地文件系统中指定的文件中。没有默认值。
--sbom-scanner-command=image¶
通过从扫描器镜像运行指定的命令来生成 SBOM。如果指定了多个命令,它们将按指定顺序运行。执行以下文本替换
{ROOTFS} 构建镜像文件系统的根目录,绑定挂载。
{CONTEXT} 构建上下文和额外的构建上下文,绑定挂载。
{OUTPUT} 临时输出文件的名称,将读取并与其他文件合并或复制到其他位置。
--sbom-scanner-image=image¶
使用指定的扫描器镜像生成 SBOM。
--secret=id=id[,src=envOrFile][,env=ENV][,type=file | env]¶
以安全的方式将秘密信息传递给 Containerfile,用于构建镜像,这些秘密信息不会存储在最终镜像中,也不会在其他阶段可见。秘密的值将从“id”选项指定的环境变量或文件中读取,如果指定了“src”选项,则从“src”选项指定的环境变量或文件中读取,或者从“env”选项指定的环境变量中读取。请参阅 EXAMPLES。秘密默认将挂载到容器的 /run/secrets/id 中。
要稍后使用该秘密,请在 Containerfile 的 RUN 指令中使用 --mount 标志。
RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret
可以使用 RUN --mount 标志的“target”、“dst”或“destination”选项来覆盖秘密在容器中的位置。
RUN --mount=type=secret,id=mysecret,target=/run/secrets/myothersecret cat /run/secrets/myothersecret
注意:更改秘密文件的内容不会触发使用这些秘密的层的重建。
--security-opt=option¶
安全选项
apparmor=unconfined: 关闭容器的 apparmor 限制apparmor=alternate-profile: 为容器设置 apparmor 限制配置文件label=user:USER: 为容器进程设置标签 userlabel=role:ROLE: 为容器进程设置标签 rolelabel=type:TYPE: 为容器进程设置标签进程类型label=level:LEVEL: 为容器进程设置标签级别label=filetype:TYPE: 为容器文件设置标签文件类型label=disable: 关闭容器的标签分离no-new-privileges: 禁用容器进程获取额外权限seccomp=unconfined: 关闭容器的 seccomp 限制seccomp=profile.json: 用作容器 seccomp 过滤器的 JSON 文件。
--shm-size=number[unit]¶
/dev/shm 的大小。 单位 可以是 b (字节)、k (千字节)、m (兆字节) 或 g (千兆字节)。如果省略单位,系统将使用字节。如果省略大小,默认值为 64m。当 size 为 0 时,容器用于 IPC 的内存量没有限制。此选项与 --ipc=host 冲突。
--skip-unused-stages¶
跳过多阶段构建中不影响目标阶段的阶段。(默认值:true)。
--source-date-epoch=seconds¶
将构建镜像的“created”时间戳设置为自纪元(Unix 时间 0,即 1970 年 1 月 1 日 00:00:00 UTC)以来的秒数(默认是使用 SOURCE_DATE_EPOCH 环境变量中设置的值,如果未设置则使用当前时间)。
当镜像提交时,“created”时间戳会写入镜像的配置和清单中,因此即使 Containerfile 和构建上下文没有其他更改,两次运行相同的构建通常也会生成具有不同 sha256 哈希的镜像。
当设置此标志时,SOURCE_DATE_EPOCH 构建参数将为其声明的阶段提供其值。
当设置此标志时,镜像配置的“created”时间戳始终设置为指定的时间,这应该允许使用相同的输入在不同时间构建相同的镜像。
当设置此标志时,按照 --output 标志指定写入的输出将带有完全指定的时间戳。
与类似的 --timestamp 标志冲突,后者也将其指定的时间设置在新层的内容上。
--squash¶
将镜像所有新层压缩成一个新层;任何现有层都不会被压缩。
--squash-all¶
将新镜像的所有层(包括从基础镜像继承的层)压缩成一个新层。
--ssh=default | id[=socket>¶
SSH 代理套接字或密钥以暴露给构建。套接字路径可以留空以使用 default=$SSH_AUTH_SOCK 的值
要稍后使用 ssh 代理,请在 Containerfile 中的 RUN 指令中使用 --mount 选项
RUN --mount=type=ssh,id=id mycmd
--tag, -t=imageName¶
指定如果构建过程成功完成,分配给结果镜像的名称。如果 imageName 不包含注册表名称,则注册表名称 localhost 会被前置到镜像名称中。
--target=stageName¶
设置要构建的目标构建阶段。当构建具有多个构建阶段的 Containerfile 时,可以使用 --target 按名称指定一个中间构建阶段作为结果镜像的最终阶段。目标阶段之后的命令将被跳过。
--timestamp=seconds¶
设置创建时间戳为自纪元以来的秒数,以允许确定性构建(默认为当前时间)。默认情况下,创建时间戳会随着每次提交而更改并写入镜像清单中,即使源完全相同,也会导致镜像的 sha256 哈希值不同。当设置 --timestamp 时,创建时间戳始终设置为指定的时间,因此不会更改,从而允许镜像的 sha256 哈希值保持不变。所有提交到镜像层的文件的创建时间戳都将是该时间戳。
如果 Containerfile 中唯一的指令是 FROM,此标志无效。
--tls-verify¶
联系注册表时要求 HTTPS 并验证证书(默认值:true)。如果明确设置为 true,则使用 TLS 验证。如果设置为 false,则不使用 TLS 验证。如果未指定,则使用 TLS 验证,除非目标注册表在 containers-registries.conf(5) 中列为不安全注册表
--ulimit=type=soft-limit[:hard-limit]¶
指定在处理 RUN 指令时应用于启动进程的资源限制。此选项可以多次指定。识别的资源类型包括:“core”:最大核心转储大小 (ulimit -c) “cpu”:最大 CPU 时间 (ulimit -t) “data”:进程数据段的最大大小 (ulimit -d) “fsize”:新文件的最大大小 (ulimit -f) “locks”:文件锁的最大数量 (ulimit -x) “memlock”:锁定内存的最大量 (ulimit -l) “msgqueue”:消息队列中的最大数据量 (ulimit -q) “nice”:niceness 调整 (nice -n, ulimit -e) “nofile”:最大打开文件数 (ulimit -n) “nproc”:最大进程数 (ulimit -u) “rss”:进程的最大大小 (ulimit -m) “rtprio”:最大实时调度优先级 (ulimit -r) “rttime”:阻塞系统调用之间的最大实时执行量 “sigpending”:最大挂起信号数 (ulimit -i) “stack”:最大堆栈大小 (ulimit -s)
--unsetannotation=annotation¶
取消设置镜像注释,导致注释不从基础镜像继承。
--unsetenv=env¶
从最终镜像中取消设置环境变量。
--unsetlabel=label¶
取消设置镜像标签,导致标签不从基础镜像继承。
--userns=how¶
设置处理 RUN 指令时用户命名空间的配置。配置值可以是“” (空字符串) 或 “container” 以指示创建新的用户命名空间,也可以是 “host” 以指示重用 podman 本身正在运行的用户命名空间,或者它可以是已由另一个进程使用的用户命名空间的路径。
--userns-gid-map=mapping¶
直接指定用于在文件系统级别设置工作容器内容所有权的 GID 映射。处理 RUN 指令时运行的命令默认在自己的用户命名空间中运行,使用 UID 和 GID 映射进行配置。
此映射中的条目采用一个或多个三元组的形式,包括起始容器内 GID、对应的起始主机级别 GID 以及映射条目表示的连续 ID 数。
此选项覆盖 /etc/containers/storage.conf 中 options 部分的 remap-gids 设置。
如果未指定此选项,但提供了全局 --userns-gid-map 设置,则使用全局选项中的设置。
如果未指定 --userns-uid-map-user、--userns-gid-map-group 或 --userns-gid-map 中的任何一个,但指定了 --userns-uid-map,则 GID 映射设置为使用与 UID 映射相同的数值。
--userns-gid-map-group=group¶
指定用于在文件系统级别设置工作容器内容所有权的 GID 映射,可以在 /etc/subgid 文件中与指定组对应的条目中找到。处理 RUN 指令时运行的命令默认在自己的用户命名空间中运行,使用 UID 和 GID 映射进行配置。如果指定了 --userns-uid-map-user,但未指定 --userns-gid-map-group,则 podman 假定指定的用户名为此选项的默认设置也是一个合适的组名。
注意:当无根用户指定此选项时,指定的映射是相对于容器中的无根用户命名空间的,而不是相对于有根运行时的主机。
--userns-uid-map=mapping¶
直接指定用于在文件系统级别设置工作容器内容所有权的 UID 映射。处理 RUN 指令时运行的命令默认在自己的用户命名空间中运行,使用 UID 和 GID 映射进行配置。
此映射中的条目采用一个或多个三元组的形式,包括起始容器内 UID、对应的起始主机级别 UID 以及映射条目表示的连续 ID 数。
此选项覆盖 /etc/containers/storage.conf 中 options 部分的 remap-uids 设置。
如果未指定此选项,但提供了全局 --userns-uid-map 设置,则使用全局选项中的设置。
如果未指定 --userns-uid-map-user、--userns-gid-map-group 或 --userns-uid-map 中的任何一个,但指定了 --userns-gid-map,则 UID 映射设置为使用与 GID 映射相同的数值。
--userns-uid-map-user=user¶
指定用于在文件系统级别设置工作容器内容所有权的 UID 映射,可以在 /etc/subuid 文件中与指定用户对应的条目中找到。处理 RUN 指令时运行的命令默认在自己的用户命名空间中运行,使用 UID 和 GID 映射进行配置。如果指定了 --userns-gid-map-group,但未指定 --userns-uid-map-user,则 podman 假定指定的组名也是此选项的默认设置的合适用户名。
注意:当无根用户指定此选项时,指定的映射是相对于容器中的无根用户命名空间的,而不是相对于有根运行时的主机。
--uts=how¶
设置处理 RUN 指令时 UTS 命名空间的配置。配置值可以是“” (空字符串) 或 “container” 以指示创建新的 UTS 命名空间,也可以是 “host” 以指示重用 podman 本身正在运行的 UTS 命名空间,或者它可以是已由另一个进程使用的 UTS 命名空间的路径。
--volume, -v=[HOST-DIR:CONTAINER-DIR[:OPTIONS]]¶
在构建过程中执行 RUN 指令时,将主机目录挂载到容器中。
OPTIONS 是一个逗号分隔的列表,可以是一个或多个:
[rw|ro]
[z|Z|O]
[U]
[
[r]shared|[r]slave|[r]private][1]
CONTAINER-DIR 必须是绝对路径,例如 /src/docs。HOST-DIR 也必须是绝对路径。Podman 在处理 RUN 指令时将 HOST-DIR 绑定挂载到指定路径。
您可以指定多个 -v 选项来挂载一个或多个挂载点。
您可以在卷后面添加 :ro 或 :rw 后缀,分别以只读或读写模式挂载。默认情况下,卷以读写模式挂载。请参阅示例。
Chowning Volume Mounts(更改卷挂载的属主)
默认情况下,Podman 不更改挂载的源卷目录的所有者和组。当使用用户命名空间运行时,命名空间内的 UID 和 GID 可能对应主机上的另一个 UID 和 GID。
:U 后缀告诉 Podman 根据命名空间内的 UID 和 GID 使用正确的主机 UID 和 GID,以递归更改源卷的所有者和组。
警告:请谨慎使用,因为这会修改主机文件系统。
Labeling Volume Mounts(为卷挂载添加标签)
SELinux 等标签系统要求在挂载到容器的卷内容上放置适当的标签。如果没有标签,安全系统可能会阻止容器内运行的进程使用该内容。默认情况下,Podman 不更改操作系统设置的标签。
要在容器上下文中更改标签,请在卷挂载后面添加 :z 或 :Z 这两个后缀之一。这些后缀告诉 Podman 重新标记共享卷上的文件对象。z 选项告诉 Podman 两个容器共享卷内容。结果,Podman 用共享内容标签标记内容。共享卷标签允许所有容器读/写内容。Z 选项告诉 Podman 用私有非共享标签标记内容。只有当前容器可以使用私有卷。
注意:不要重新标记系统文件和目录。重新标记系统内容可能会导致主机上的其他受限服务失败。对于这些类型的容器,建议禁用 SELinux 分离。选项 --security-opt label=disable 禁用容器的 SELinux 分离。例如,如果用户希望将其整个主目录卷挂载到构建容器中,则需要禁用 SELinux 分离。
$ podman build --security-opt label=disable -v $HOME:/home/user .
Overlay Volume Mounts(覆盖卷挂载)
:O 标志告诉 Podman 使用 Overlay 文件系统将主机上的目录挂载为临时存储。 RUN 命令容器被允许修改挂载点内的内容,并将其存储在容器存储中的单独目录中。在 Overlay FS 术语中,源目录是下层,容器存储目录是上层。当 RUN 命令执行完成后,对挂载点的修改将被销毁,类似于 tmpfs 挂载点。
随后的任何 RUN 命令执行都会看到原始源目录内容,之前 RUN 命令所做的任何更改都不再存在。
overlay 挂载的一个用例是将主机的包缓存共享到容器中,以加快构建速度。
注意
Overlay 挂载目前在无根模式下不受支持。
O标志不允许与Z或z标志一起指定。挂载到容器中的内容将带有私有标签。在 SELinux 系统上,源目录中的标签需要可被容器标签读取。否则,必须禁用容器的 SELinux 分离才能使其工作。使用 overlay 挂载修改挂载到容器中的目录卷可能会导致意外故障。在容器运行完成之前,请勿修改目录。
默认情况下,绑定挂载的卷是 private。这意味着容器内完成的任何挂载在主机上都不可见,反之亦然。此行为可以通过指定卷挂载传播属性来更改。
当挂载传播策略设置为 shared 时,在该卷上容器内部完成的任何挂载对主机和容器都可见。当挂载传播策略设置为 slave 时,启用单向挂载传播,并且在该卷上主机上完成的任何挂载仅在容器内部可见。要控制卷的挂载传播属性,请使用 :[r]shared、:[r]slave 或 :[r]private 传播标志。要使挂载传播在源挂载点(源目录挂载到的挂载点)上工作,源挂载点必须具有正确的传播属性。对于共享卷,源挂载点必须是共享的。对于从属卷,源挂载必须是共享的或从属的。[1]
使用 df <source-dir> 确定源挂载,然后使用 findmnt -o TARGET,PROPAGATION <source-mount-dir> 确定源挂载的传播属性,如果 findmnt 实用程序不可用,则可以通过查看 /proc/self/mountinfo 中的挂载条目来确定源挂载点。查看 optional fields 并查看是否指定了任何传播属性。shared:X 表示挂载是 shared,master:X 表示挂载是 slave,如果什么都没有,则表示挂载是 private。[1]
要更改挂载点的传播属性,请使用 mount 命令。例如,要绑定挂载源目录 /foo,请执行 mount --bind /foo /foo 和 mount --make-private --make-shared /foo。这会将 /foo 转换为 shared 挂载点。源挂载的传播属性可以直接更改。例如,如果 / 是 /foo 的源挂载,则使用 mount --make-shared / 将 / 转换为 shared 挂载。
示例¶
使用指定 Containerfile 和默认 farm 构建命名镜像和清单列表
$ podman farm build --local -t name -f /path/to/containerfile .
使用指定 farm 构建命名镜像和清单列表
$ podman farm build --farm myfarm -t name .
使用指定 farm 构建命名镜像和清单列表,在将所有镜像推送到 registry 后,从 farm 节点中删除它们
$ podman farm build --farm myfarm --cleanup -t name .
使用默认 farm 为指定平台构建命名镜像和清单列表
$ podman farm build --platforms arm64,amd64 -t name .
另请参阅¶
podman(1)、podman-farm(1)、buildah(1)、containers-certs.d(5)、containers-registries.conf(5)、crun(1)、runc(8)、useradd(8)、Containerfile(5)、containerignore(5)
历史¶
2023 年 9 月,由 Urvashi Mohnani <umohnani@redhat.com> 首次编译
脚注¶
1:Podman 项目致力于包容性,这是开源的核心价值。此处使用的 master 和 slave 挂载传播术语存在问题且具有分歧,需要更改。但是,这些术语目前在 Linux 内核中使用,并且在此刻必须照常使用。当内核维护者纠正此用法时,Podman 将立即效仿。