NAME

Podman-Build-使用容器文件构建容器镜像

SYNOPSIS

podman build [options] [context]

podman image build [options] [context]

DESCRIPTION

podman build 使用一个或多个容器文件或Docker文件以及指定的构建上下文目录中的说明构建映像。Containerfile在内部使用与Dockerfile相同的语法。在本文档中,称为容器文件的文件可以是名为‘Containerfile’或‘Dockerfile’的文件。

构建上下文目录可以指定为存档、Git存储库或容器文件的http(S)URL。

使用调用时 -f 和指向Containerfile的路径,没有显式的上下文目录,Podman使用Containerfile的父目录作为其构建上下文。

以“.in”后缀结尾的容器文件通过cpp(1)进行预处理。这对于将容器文件分解成几个可通过CPP使用的可重用部分非常有用 #include 指令。以.in结尾的容器文件被限制为无注释行,除非它们是CPP命令。请注意,通过手动对Containerfile.in文件进行预处理时,其他工具仍可使用该文件 cpp -E

当URL为存档时,URL的内容将被下载到临时位置并在执行之前提取。

当URL是容器文件时,容器文件被下载到临时位置。

当将Git存储库设置为URL时,该存储库将在本地克隆,然后设置为上下文。如果URL具有Git存储库 git:// 前缀或a .git 后缀。

注: podman build 使用源自 Buildah 用于构建容器映像的项目。这 Buildah 代码创建 Buildah 容器中的 RUN 容器存储中的选项。在某些情况下,当 podman build 崩溃或用户会导致 podman build 进程,则可以将这些外部容器留在容器存储中。使用 podman ps --all --storage 命令查看这些容器。外部容器可以使用 podman rm --storage 指挥部。

podman buildx build 命令是的别名 podman build 。不是全部 buildx build 功能在Podman中可用。这个 buildx build 为实现脚本兼容性,提供了选项。

OPTIONS

--add-host = host:ip

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

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

--all-platforms

而不是为一组使用 --platform 选项,检查构建的基本映像,并为所有可用的平台进行构建。使用以下内容的阶段 划痕 由于起点不能检查,所以至少有一个非 划痕 阶段必须存在,检测才能有效地工作。

--annotation = annotation=value

添加图像 注解 (例如,批注= 价值 )到图像元数据。可多次使用。

注意:该信息不存在于Docker格式的图片中,因此在以Docker格式写入图片时会将其丢弃。

--arch = arch

将要构建的映像的体系结构和要拉取的基本映像的体系结构(如果构建使用)设置为提供的值,而不是使用构建主机的体系结构。除非被覆盖,否则对本地存储中相同映像的后续查找将与此体系结构匹配,而与主机无关。(示例:ARM、ARM 64、386、AMD64、ppc64le、s390x)

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

--build-arg = arg=value

指定构建参数及其值,它以与环境变量相同的方式内插在从容器文件读取的指令中,但不会添加到结果映像配置中的环境变量列表中。

--build-arg-file = path

指定一个文件,该文件包含表单的生成参数行 arg=value 。建议的文件名为 argfile.conf

以开头的注释行 # 与空行一起被忽略。所有其他对象必须属于 arg=value 格式传递给 --build-arg

如果通过 --build-arg-file--build-arg 选项时,生成参数将跨所有提供的文件和命令行参数合并。

中提供的任何文件 --build-arg-file 选项在通过 --build-arg 选择。

当一个给定的参数名称被指定多次时,最后一个实例就是传递给结果生成的实例。这意味着 --build-arg 值始终重写 --build-arg-file

--build-context = name=value

使用其短名称和位置指定其他生成上下文。可以采用与我们访问复制指令中的不同阶段相同的方式来引用其他构建上下文。

有效值包括:

  • 本地目录-例如--构建上下文项目2=../路径/到/项目2/src(此选项不适用于远程Podman客户端。在Podman机器设置(即MacOS和Windows)上,机器VM上必须存在路径)

  • 指向tarball的http URL--例如--构建上下文src=https://example.org/releases/src.tar

  • 容器图像-使用容器图像://前缀指定,例如--构建上下文高山=容器-图像://高山:3.15,(也接受docker://、docker-Image://)

在容器文件端,在接受“from”参数的所有命令上引用构建上下文。这看起来可能是这样的:

FROM [name]
COPY --from=[name] ...
RUN --mount=from=[name] 

的价值 [name] 与以下优先级顺序匹配:

  • 使用--Build-Context定义的命名构建上下文 [name] =..

  • 使用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 .

注: --cache-from 选项被忽略,除非 --layers 是指定的。

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

注: --cache-to 选项被忽略,除非 --layers 是指定的。

--cache-ttl

限制缓存图像的使用,使其仅考虑创建时间戳小于 duration 那是以前的事了。例如,如果 --cache-ttl=1h 则Buildah将考虑在一小时持续时间内创建的中间缓存图像,而忽略该持续时间之外的中间缓存图像。

注:设置 --cache-ttl=0 手动相当于使用 --no-cache 因为这意味着用户根本不想使用缓存。

--cap-add = CAP_xxx

执行Run指令时,运行指令中指定的命令,并将指定的功能添加到其功能集。默认情况下会授予某些功能;此选项可用于添加更多功能。

--cap-drop = CAP_xxx

When executing RUN instructions, run the command specified in the instruction with the specified capability removed from its capability set. The CAP_CHOWN, CAP_DAC_OVERRIDE, CAP_FOWNER, CAP_FSETID, CAP_KILL, CAP_NET_BIND_SERVICE, CAP_SETFCAP, CAP_SETGID, CAP_SETPCAP, and CAP_SETUID capabilities are granted by default; this option can be used to remove them.

如果将功能指定给 --cap-add--cap-drop 选项,则不管提供选项的顺序如何,它都会被丢弃。

--cert-dir = path

在以下位置使用证书 path (\ *.crt, * .cert,\ *.key) to connect to the registry. (Default: /etc/containers/certs.d) For details, see * containers-certs.d(5) *。(此选项不适用于远程Podman客户端,包括Mac和Windows(不包括WSL2)计算机)

--cgroup-parent = path

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

--cgroupns = how

处理时设置cgroup命名空间的配置 RUN 指示。配置的值可以是“”(空字符串)或“Private”,表示创建了新的cgroup命名空间,也可以是“host”,表示其中的cgroup命名空间 buildah 其本身正在被运行,并被重复使用。

--compress

添加此选项是为了与其他容器CLI对齐。Podman不与守护程序或远程服务器通信。因此,在发送之前压缩数据对Podman来说是无关紧要的。(此选项不适用于远程Podman客户端,包括Mac和Windows(不包括WSL2)计算机)

--cpp-flag = flags

设置要传递给C预处理器CPP(1)的附加标志。以“.in”后缀结尾的容器文件通过cpp(1)进行预处理。此选项可用于将其他标志传递给cpp.注意:您还可以通过设置BUILDAH_CPPFLAGS环境变量(例如,EXPORT BUILDAH_CPPFLAGS=“-DDEBUG”)来设置默认CPPFLAGS。

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

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

--creds = [[用户名[:密码]]]

这个 [username[:password] ]如有需要,可用于向登记处进行认证。如果未提供其中一个或两个值,则会出现命令行提示符并可以输入值。输入密码时没有回显。

请注意,指定的凭据仅用于针对目标注册表进行身份验证。它们不用于镜像或在重写注册表时(请参见 containers-registries.conf(5) );要针对那些考虑使用 containers-auth.json(5) 文件。

--cw = options

使用Krun产生适合用作在可信执行环境(TEE)中运行的机密工作负载的映像(即, crun 构建时启用了libkrun功能,并作为 krun )。与传统内容不同,镜像的根文件系统将包含加密的磁盘镜像和Krun的配置信息。

的值 options 是逗号分隔的键=值对列表,提供生成将包括在容器映像中的附加数据所需的配置信息。

公认的 keys 包括:

attestation_url :密钥代理/证明服务器的位置。如果指定了值,则新映像的工作负载ID以及用于加密磁盘映像的密码将注册到服务器,并且服务器的位置将存储在容器映像中。在运行时,Krun需要使用工作负载ID联系服务器以检索密码短语,该ID也存储在容器映像中。如果未指定值,则会引发 passphrase 价值 must 被指定。

cpus :映像预期在运行时使用的虚拟CPU数量。如果未指定,则将提供默认值。

firmware_library :libkrunfw-sev共享库的位置。如果未指定, buildah 检查其在多个硬编码位置的存在。

memory :映像在运行时预期使用的内存量,以兆字节为单位。如果未指定,则将提供默认值。

passphrase :用于加密将包含在容器镜像中的磁盘镜像的密码。如果未指定任何值,但有一个 attestation_url 值,则将使用随机生成的密码短语。作者建议设置一个 attestation_url 但不是 passphrase

slop :为磁盘映像分配的额外空间与容器映像内容的大小相比,以百分比(..%)或大小值(字节,如果存在后缀,则为更大的单位)表示,或两个或更多此类规范的总和。如果未指定, buildah 猜测比内容多25%的空间就足够了,但提供此选项是为了防止猜测错误。

type :应将映像标记为与其一起使用的可信执行环境(TEE)的类型。接受的值为“SEV”(AMD安全加密虚拟化-加密状态)和“SNP”(AMD安全加密虚拟化-安全嵌套寻呼)。如果未指定,则默认为“SNP”。

workload_id :将记录在容器映像中的工作负载标识符,将在运行时用于检索用于加密磁盘映像的密码短语。如果未指定,将从基本图像的图像ID中导出一个半随机值。

远程客户端(包括Mac和Windows(不包括WSL2)计算机)不支持此选项。

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

注意:如果用户只有通过组的访问权限,则无法从无根容器内部访问设备。这个 crun(1) 运行时通过添加选项提供了解决此问题的方法 --annotation run.oci.keep_original_groups=1

--disable-compression-D

构建映像时不要压缩文件系统层,除非写入映像的位置需要压缩。这是默认设置,因为图像层在被推送到注册表时会自动压缩,写入本地存储的图像只需再次解压缩即可存储。通过指定以下命令,可以在所有情况下强制压缩 --disable-compression=false

--disable-content-trust

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

--dns = IP地址

设置自定义的DNS服务器。

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

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

此选项不能与 --network 它被设置为 none

注意:此选项仅在 RUN 构建中的说明。它不会影响 /etc/resolv.conf 在最终的图像中。

--dns-option = 选项

设置要在构建过程中使用的自定义DNS选项。

--dns-search =

设置要在构建过程中使用的自定义DNS搜索域。

--env = env[=value]

添加一个值(例如env= value )添加到构建的映像。可多次使用。如果两者都不是 = 也不是 value 是指定的,但是 env 在当前环境中设置,则会将当前环境中的值添加到图像中。若要从构建的映像中删除环境变量,请使用 --unsetenv 选择。

--file-f = 容器文件

指定一个容器文件,该文件包含生成映像的说明,可以是本地文件,也可以是 httphttps URL。如果指定了多个容器文件, FROM 只接受来自最后一个指定文件的说明。

如果未指定生成上下文,并且至少有一个容器文件是本地文件,则将其所在的目录用作生成上下文。

指定选项 -f - 使Containerfile内容从标准输入中读取。

--force-rm

始终在生成后移除中间容器,即使生成失败也是如此(默认为真)。

--format

控制构建的映像的清单和配置数据的格式。可识别的格式包括 oci (OCI Image-Spec v1.0,默认)和 码头工人 (版本2,使用模式格式2作为清单)。

注意:您也可以通过设置BUILDAH_FORMAT环境变量来覆盖默认格式。 export BUILDAH_FORMAT=docker

--from

覆盖第一个 FROM 容器文件中的指令。如果容器文件中有多个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文件都为构建容器配置一个挂钩。有关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/tainers/oci/hooks.d。不建议使用这些默认设置。迁移到显式设置--hooks-dir。

--http-proxy

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

默认为 true

--identity-label

添加默认身份标签 io.buildah.version 如果设置的话。(默认为真)。

--ignorefile

备用.tainerIgnore文件的路径。

--iidfile = ImageIDfile

将构建的映像的ID写入文件。什么时候 --platform 多次指定,则尝试使用此选项会触发错误。

--ipc = how

处理时设置IPC命名空间的配置 RUN 指示。配置的值可以是“”(空字符串)或“容器”,表示创建了新的IPC命名空间,也可以是“host”,表示 podman 它本身正在被重复使用,或者它可以是指向已被另一个进程使用的IPC命名空间的路径。

--isolation = type

控制将哪种类型的隔离用于作为 RUN 指示。可识别的类型包括 oci (默认情况下,兼容OCI运行时)、 无根 (使用修改后的配置调用与OCI兼容的运行时,并启用其--rootless选项 --no-new-keyring --no-pivot 添加到其 创建 调用,禁用网络和UTS命名空间,启用IPC、PID和用户命名空间;非特权用户的默认设置),以及 克罗特 (内部包装器更倾向于chroot(1),而不是容器技术)。

注意:您还可以通过设置BUILDAH_ISOLATION环境变量来覆盖默认的隔离类型。 export BUILDAH_ISOLATION=oci

--jobs =

并行运行最多N个并发阶段。如果作业数大于1,则从/dev/NULL读取标准输入。如果指定0,则对并行运行的作业数没有限制。

--label = 标签

添加图像 标签 (例如,标签= 价值 )到图像元数据。可多次使用。

用户可以设置特殊标签 io.containers.capabilities=CAP1,CAP2,CAP3 在指定容器正常运行所需的Linux功能列表的Container文件中。容器映像中指定的这个标签告诉Podman只运行具有这些功能的容器。只要该功能列表是默认列表的子集,Podman就只启动具有指定功能的容器。

如果指定的功能不在默认设置中,Podman将打印一条错误消息,并使用默认功能运行容器。

--layer-label = label[=value]

添加中间图像 label (例如,标签= value )到中间图像元数据。它可以多次使用。

如果 label 被命名,但两者都不是 = 也不是 value 被提供,则 label 设置为空值。

--layers

在构建过程中缓存中间图像(默认为 true )。

注意:也可以通过设置BUILDAH_LAYERS环境变量来替代LAYERS的默认值。 export BUILDAH_LAYERS=true

--logfile = 文件名

将记录输出发送到标准输出和标准错误到指定文件,而不是发送到标准输出和标准错误。远程客户端(包括Mac和Windows(不包括WSL2)计算机)不支持此选项。

--logsplit = bool-value

如果 --logfile--platform 被指定,则 --logsplit 选项允许最终用户将每个平台的日志文件拆分成以下格式的不同文件: ${logfile}_${platform-os}_${platform-arch} 。远程客户端(包括Mac和Windows(不包括WSL2)计算机)不支持此选项。

--manifest = manifest

要将图像添加到的清单列表的名称。如果清单列表不存在,则创建清单列表。此选项对于构建多架构映像非常有用。

--memory-m = number[unit]

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

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

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

--memory-swap = number[unit]

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

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

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

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

--network = mode--net

处理时设置网络命名空间的配置 RUN 指示。

有效 mode 值包括:

  • none :没有网络。

  • host :使用Podman主机网络堆栈。注意:主机模式允许容器完全访问本地系统服务,如D-BUS,因此被认为是不安全的。

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

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

  • <network name|ID> :使用给定的名称或ID加入网络,例如使用 --network mynet 以MyNet的名字加入这个网络。仅支持Rootful用户。

  • [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地址。

  • 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 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接口以提高性能

--no-cache

不要将现有的缓存图像用于容器构建。使用一组新的缓存层从头开始构建。

--no-hostname

请勿创建 /etc/hostname 运行指令的容器中的文件。

默认情况下,Buildah管理 /etc/hostname 文件,添加容器自己的主机名。当 --no-hostname 选项,则图像的 /etc/hostname 如果它存在,将被原封不动地保留。

--no-hosts

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

此选项与 --add-host

--omit-history

省略构建映像中的构建历史信息。(默认为FALSE)。

此选项在最终用户明确希望设置 --omit-history 要省略可选的 History 从构建的映像或在使用使用不包括的构建工具构建的映像时 History 他们图像中的信息。

--os = 字符串

设置要构建的映像的操作系统以及要拉取的基本映像的操作系统(如果构建使用操作系统),而不是使用构建主机的当前操作系统。除非被覆盖,否则对本地存储中相同映像的后续查找将与此操作系统匹配,而与主机无关。

--os-feature = feature

设置所需操作系统的名称 feature 对于所构建的图像。默认情况下,如果图像不是基于 scratch ,则保留基本映像的所需操作系统功能列表(如果基本映像指定了任何功能)。此选项通常仅在映像的操作系统为Windows时才有意义。

如果 feature 有一个尾部 - ,然后是 feature 从图像中列出的所需功能集中删除。

--os-version = version

设置所需的确切操作系统 version 对于所构建的图像。默认情况下,如果图像不是基于 scratch ,则保留基本映像所需的操作系统版本(如果基本映像指定了一个版本)。此选项通常仅在映像的操作系统为Windows时才有意义,并且通常在Windows基本映像中设置,因此通常不需要使用此选项。

--output-o = output-opts

输出目的地(格式:TYPE=LOCAL,DEST=路径)

输出(或-o)选项扩展了构建容器镜像的默认行为,它允许用户将镜像的内容导出为本地文件系统上的文件,这对于生成本地二进制文件、代码生成等很有用。(远程Podman客户端,包括Mac和Windows(不包括WSL2)计算机上不提供该选项)

输出的值是一个逗号分隔的键=值对序列,用于定义输出类型和选项。

支撑点 keys 包括:

  • dest :导出输出的目标路径。有效值为绝对路径或相对路径, - 表示标准输出。

  • type :定义要使用的输出类型。有效值记录如下。

有效 type 值包括:

  • local :将生成的构建文件写入客户端的某个目录。

  • tar :将生成的文件编写为单个tarball(.tar)。

如果未指定类型,则该值默认为 local 。或者,不使用逗号分隔的序列,而是 --output 可以只是一个目的地(在 dest 格式)(例如 --output some-path--output - )其中 --output some-path 被视为 type=local--output - 被视为 type=tar

--pid = pid

设置处理时的PID命名空间的配置 RUN 指示。配置的值可以是“”(空字符串)或“容器”,表示创建了一个新的PID命名空间,也可以是“host”,表示其中 podman 它本身正在被重复使用,或者它可以是指向已被另一个进程使用的PID命名空间的路径。

--platform = os/arch[/variant][,...]

设置 os/arch 将构建的映像(以及其基本映像,在使用映像时)设置为提供的值,而不是使用主机的当前操作系统和体系结构(例如 linux/arm )。除非被覆盖,否则对本地存储中相同映像的后续查找将与此平台匹配,而与主机无关。

如果 --platform 的值,则 --arch--os ,以及 --variant 选项被覆盖。

这个 --platform 选项可以多次指定,或者给出一个逗号分隔的值列表作为其参数。当指定了多个平台时, --manifest 选项,而不是 --tag 选择。

OS/ARCH对是围棋编程语言使用的操作系统/ARCH对。在几种情况下, arch 平台的价值不同于其他工具产生的价值,例如 arch 指挥部。有效的操作系统和体系结构名称组合在https://golang.org/doc/install/source#environment,上作为$GOOS和$GOARCH值列出,也可以通过运行以下命令找到 go tool dist list

而当 podman build 乐于使用基本映像并为现有的任何平台构建映像, RUN 指令能够在不借助由诸如 qemu-user-static

--pull = policy

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

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

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

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

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

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

--quiet-q

禁止显示输出消息,这些消息指示正在处理的指令以及从注册表中提取图像和写入输出图像时的进度。

--retry = attempts

失败时在注册表和本地存储之间重试拉取或推送映像的次数。缺省值为 3

--retry-delay = duration

如果失败,在注册表和本地存储之间拉取或推送图像时,重试尝试之间的延迟持续时间。默认情况下,开始时间为两秒,然后以指数方式后退。设置此值时使用延迟,并且不会发生指数回退。

--rm

成功生成后删除中间容器(默认为True)。

--runtime = path

这个 path 到与OCI兼容的备用运行库,该运行库用于运行 RUN 指示。

注意:您还可以通过设置BUILDAH_RUNTIME环境变量来覆盖默认的运行时。 export BUILDAH_RUNTIME=/usr/local/bin/runc

--runtime-flag = flag

为容器运行时添加全局标志。要列出支持的标志,请查阅所选容器运行时的手册页。

注意:不要将前导--传递给旗帜。要将runc标志--log-Format json传递给Buildah Build,给出的选项是--runtime-mark log-Format=json。

--sbom = preset

通过扫描工作容器为输出图像生成SBOM(软件材料清单),并使用扫描仪图像、扫描仪命令和合并策略的命名组合构建上下文。必须使用一个或多个 --sbom-image-output--sbom-image-purl-output--sbom-output ,以及 --sbom-purl-output 。可识别的预设以及它们等同于以下各项的选项集:

  • “syft”,“syft-cyonedx”:--sbom-scanner-Image=ghcr.io/annore/syft--sbom-scanner-Command=“/syft扫描-q目录:{ROOTFS}--输出周期x-json={输出}”--sbom-scanner-Command=“/syft扫描-q目录:{CONTEXT}--输出周期x-json={输出}”--sbom-merge-strategy=merge-cyclonedx-by-component-name-and-version

  • “syft-spdx”:--sbom-scanner-Image=ghcr.io/Anchore/syft--sbom-scanner-Command=“/syft扫描-q目录:{ROOTFS}--输出spdx-json={输出}”--sbom-scanner-Command=“/syft扫描-q目录:{上下文}--输出spdx-json={输出}”--sbom-merge-strategy=merge-spdx-by-package-name-and-versioninfo

  • “trivy”,“trivy-cle onedx”:--sbom-scanner-image=ghcr.io/aquasecurity/trivy--sbom-scanner-Command=“trivy文件系统--Q{ROOTFS}--格式周期x--输出{输出}”--sbom-scanner-Command=“Trivy文件系统--Q{上下文}--格式周期x--输出{输出}”--sbom-merge-strategy=merge-cyclonedx-by-component-name-and-version

  • “trivy-spdx”:--sbom-scanner-image=ghcr.io/aquasecurity/trivy--sbom-scanner-Command=“trivy文件系统--q{ROOTFS}--格式spdx-json--输出{输出}”--sbom-scanner-Command=“trivy文件系统--q{上下文}--格式spdx-json--输出{输出}”--sbom-merge-strategy=merge-spdx-by-package-name-and-versioninfo

--sbom-image-output = path

在生成SBOM时,将生成的SBOM存储在输出图像的指定路径中。没有违约。

--sbom-image-purl-output = path

在生成sBOM时,扫描它们的Purl( [package URL] (https://github.com/package-url/purl-spec/blob/master/PURL-SPECIFICATION.rst))信息,并将找到的URL列表保存到输出图像中的指定路径。没有违约。

--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( [package URL] (https://github.com/package-url/purl-spec/blob/master/PURL-SPECIFICATION.rst))信息,并将找到的PURL列表保存到本地文件系统中指定的文件中。没有违约。

--sbom-scanner-command = image

通过从扫描仪图像运行指定命令来生成sBOM。如果指定了多个命令,则它们将按指定的顺序运行。执行以下文本替换:

  • {ROOTFS}构建的映像的文件系统的根,绑定已挂载。

  • {CONTEXT}已装入绑定的生成上下文和其他生成上下文。

  • {输出}要读取并与其他文件合并或复制到其他地方的临时输出文件的名称。

--sbom-scanner-image = image

使用指定的扫描仪图像生成SBOM。

--secret = id=id,src=path

传递容器文件中使用的机密信息,以便以安全的方式构建未存储在最终映像中或在其他阶段可见的映像。密码挂载在容器中的默认位置 /run/secrets/id

要在以后使用该密码,请在 RUN 中的指令 Containerfile

RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret

--security-opt = 选项

安全选项

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

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

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

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

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

--sign-by = 指纹

使用具有指定指纹的GPG密钥对图像进行签名。(此选项不适用于远程Podman客户端,包括Mac和Windows(不包括WSL2)计算机。)

--skip-unused-stages

跳过不影响目标阶段的多阶段构建中的阶段。(默认: true )。

--squash

将图像的所有新层挤压到一个新层中;不会挤压任何先前存在的层。

--squash-all

将新图像的所有层(包括从基础图像继承的层)挤压到一个新层中。

--ssh = default | id[=socket>

向构建公开的SSH代理套接字或密钥。套接字路径可以保留为空以使用 default=$SSH_AUTH_SOCK

要在以后使用ssh代理,请在 RUN 中的指令 Containerfile

RUN --mount=type=ssh,id=id mycmd

--stdin

将stdin传递到运行容器中。有时,在容器文件中运行的命令想要向用户请求信息。例如,APT要求确认安装。使用--stdin以便能够在构建期间从终端进行交互。

--tag-t = 图像名称

指定在构建过程成功完成时分配给结果映像的名称。如果 imageName 不包括注册表名称、注册表名称 localhost 是图像名称的前缀。

--target = 艺名

将目标构建阶段设置为Build。在构建具有多个构建阶段的容器文件时,--Target可用于按名称指定一个中间构建阶段作为结果映像的最终阶段。跳过目标阶段之后的命令。

--timestamp = seconds

将CREATE TIMESTAMP设置为EPOCH以来的秒数,以允许确定性构建(默认为当前时间)。默认情况下,每次提交时都会更改创建的时间戳并将其写入映像清单中,从而导致映像的sha256散列不同,即使源文件在其他方面完全相同。设置--Timestamp时,创建的时间戳始终设置为指定的时间,因此不会更改,从而允许映像的sha256散列保持不变。提交到图像各层的所有文件都使用时间戳创建。

如果容器文件中的唯一指令是 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)“lock”:文件锁的最大数量(ulimit-x)“emlock”:最大锁定内存量(ulimit-l)“msgQueue”:消息队列中的最大数据量(ulimit-q)“NICE”:NICE调整(NICE-N,Ulimit-e)“nofile”:打开文件的最大数量(ulimit-n)“nproc”:最大进程数量(ulimit-u)“rss”:进程的最大大小(ulimit-m)“rtprio”:最大实时调度优先级(ulimit-r)“rttime”:阻塞syscall之间实时执行的最大数量“sigending”:挂起信号的最大数量(ulimit-i)“STACK”:最大堆栈大小(ulimit-s)

--unsetenv = env

从最终图像中取消设置环境变量。

--unsetlabel = label

取消设置图像标签,导致标签不从基本图像继承。

--userns = how

处理时设置用户命名空间的配置 RUN 指示。配置的值可以是“”(空字符串)或“容器”,表示创建了新的用户命名空间,可以是“host”,表示其中的用户命名空间 podman 它本身正在被重复使用,或者它可以是指向已被另一个进程使用的用户命名空间的路径。

--userns-gid-map = 映射

直接指定一个GID映射,用于在文件系统级别设置工作容器内容的所有权。命令在处理时运行 RUN 指令默认在它们自己的用户命名空间中运行,使用UID和GID映射进行配置。

此映射中的条目采用起始容器内GID、对应的起始主机级GID和映射条目表示的连续ID的数量的一个或多个三元组的形式。

此选项将重写 remap-gids 中的设置 选项 /etc/tainers/storage.conf的部分。

如果未指定此选项,但提供了全局--userns-gid-map设置,则使用全局选项中的设置。

如果未指定--userns-uid-map-user、--userns-gid-map-group或--userns-gid-map,但指定了--userns-uid-map,则GID映射将设置为使用与UID映射相同的数值。

--userns-gid-map-group =

指定用于在文件系统级别设置工作容器内容的所有权的GID映射可以在 /etc/subgid 与指定组对应的文件。命令在处理时运行 RUN 指令默认在它们自己的用户命名空间中运行,使用UID和GID映射进行配置。如果指定了--userns-uid-map-user,但未指定--userns-gid-map-group, podman 假定指定的用户名也是用作此选项的默认设置的合适组名。

NOTE: 当无根用户指定此选项时,指定的映射是相对于容器中的无根用户命名空间的,而不是像运行Rootful时那样相对于主机。

--userns-uid-map = 映射

直接指定用于在文件系统级别设置工作容器内容所有权的UID映射。命令在处理时运行 RUN 指令默认在其自己的用户命名空间中运行,使用UID和GID映射进行配置。

此映射中的条目采用起始容器内UID、对应的起始主机级UID和映射条目表示的连续ID的数量的一个或多个三元组的形式。

此选项将重写 remap-uids 中的设置 选项 /etc/tainers/storage.conf的部分。

如果未指定此选项,但提供了全局--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 假定指定的组名也是用作此选项的默认设置的合适用户名。

NOTE: 当无根用户指定此选项时,指定的映射是相对于容器中的无根用户命名空间的,而不是像运行Rootful时那样相对于主机。

--uts = how

处理时设置UTS命名空间的配置 RUN 指示。配置的值可以是“”(空字符串)或“容器”,表示要创建新的UTS命名空间,也可以是“host”,表示其中的UTS命名空间 podman 它本身正在被重复使用,或者它可以是指向已被另一个进程使用的UTS命名空间的路径。

--variant = variant

将要构建的映像的体系结构变量和要拉取的基本映像的体系结构变量(如果构建使用)设置为提供的值,而不是使用构建主机的体系结构变量。

--volume-v = [HOST-DIR:CONTAINER-DIR[:OPTIONS]]

在生成期间执行运行指令时,将主机目录装载到容器中。

这个 OPTIONS 是逗号分隔的列表,可以是以下一项或多项:

  • [RW|RO]

  • [Z|Z|O]

  • [U]

  • [[r] 共享| [r] 奴隶| [r] Private] [1]

这个 CONTAINER-DIR 必须是绝对路径,如 /src/docs 。这个 HOST-DIR 也必须是绝对路径。Podman捆绑安装了 HOST-DIR 设置为在处理运行指令时指定的路径。

您可以指定多个 -v 装载一个或多个装载的选项。

您可以添加 :ro:rw 为卷添加后缀,以分别以只读或读写模式装载它。默认情况下,卷以读写方式装载。请参见示例。

Chowning Volume Mounts

默认情况下,Podman不会更改装载的源卷目录的所有者和组。使用用户命名空间运行时,命名空间内的UID和GID可能对应于主机上的另一个UID和GID。

这个 :U Suffix告诉Podman根据名称空间中的UID和GID使用正确的主机UID和GID,以递归方式更改源卷的所有者和组。

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

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使用覆盖文件系统将主机上的目录挂载为临时存储。这个 RUN 允许命令容器修改挂载点内的内容,并将其存储在容器存储中的单独目录中。在覆盖FS术语中,源目录位于较低位置,而容器存储目录位于较高位置。时,对装入点的修改将被销毁 RUN 命令结束执行,类似于tmpfs挂载点。

任何随后执行的 RUN 命令查看原始的源目录内容,与以前的运行命令相比所做的任何更改都不再存在。

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

注:

  • 无根模式下当前不支持覆盖挂载。

  • 这个 O 标志不允许使用 Zz 旗帜。装载到容器中的内容被贴上私有标签。在SELinux系统上,源目录中的标签需要可由容器标签读取。否则,必须禁用SELinux容器分离才能使容器工作。

  • 使用覆盖装载修改装载到容器中的目录卷可能会导致意外故障。在容器运行完成之前,不要修改目录。

默认情况下,绑定装载的卷是 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 意味着坐骑是 sharedmaster:X 意味着坐骑是 slave 如果什么都没有,那就意味着坐骑 private [1]

若要更改装入点的传播属性,请使用 mount 指挥部。例如,要绑定装载源目录,请执行以下操作 /foomount --bind /foo /foomount --make-private --make-shared /foo 。这会将/foo转换为 shared 挂载点。源装载的传播属性可以直接更改。例如,如果 / 是的源装载 /foo ,然后使用 mount --make-shared / 要转换 / 变成一个 shared 坐骑。

EXAMPLES

使用本地容器文件构建映像

使用Containerfile和当前目录中的内容构建映像:

$ podman build .

使用指定的Containerfile和当前目录中的内容构建映像:

$ podman build -f Containerfile.simple .

使用stdin中的Containerfile和当前目录中的内容构建映像:

$ cat $HOME/Containerfile | podman build -f - .

使用包含当前目录内容的多个Container文件构建映像:

$ podman build -f Containerfile.simple -f Containerfile.notsosimple .

使用$HOME目录中的内容构建具有指定Containerfile的映像。注意事项 cpp 在作为Containerfile处理之前应用于Containerfile.in:

$ podman build -f Containerfile.in $HOME

使用Containerfile和当前目录中的内容构建具有指定标签的镜像:

$ podman build -t imageName .

构建镜像,忽略通过容器文件拉取的任何镜像的注册表验证:

$ podman build --tls-verify=false -t imageName .

使用指定的日志记录格式构建镜像:

$ podman build --runtime-flag log-format=json .

使用调试模式构建用于日志记录的映像:

$ podman build --runtime-flag debug .

从选定的容器文件中提取图像时,使用指定的注册表属性生成图像:

$ podman build --authfile /tmp/auths/myauths.json --cert-dir $HOME/auth --tls-verify=true --creds=username:password -t imageName -f Containerfile.simple .

在构建过程中运行容器时使用指定的资源控制构建映像:

$ podman build --memory 40m --cpu-period 10000 --cpu-quota 50000 --ulimit nofile=1024:1028 -t imageName .

在构建期间使用指定的SELinux标签和运行容器的cgroup配置构建映像:

$ podman build --security-opt label=level:s0:c100,c200 --cgroup-parent /path/to/cgroup/parent -t imageName .

在构建过程中,使用从主机装载到运行容器中的只读卷和SELinux重新标记的卷构建映像:

$ podman build --volume /home/test:/myvol:ro,Z -t imageName .

在构建过程中,将从主机装载的覆盖卷构建到运行的容器中:

$ podman build -v /var/lib/yum:/var/lib/yum:O -t imageName .

使用层构建映像,然后删除中间容器,即使构建失败也是如此。

$ podman build --layers --force-rm -t imageName .

构建映像忽略缓存,并且即使构建成功也不删除中间容器:

$ podman build --no-cache --rm=false -t imageName .

在构建过程中运行容器时使用指定的网络构建镜像:

$ podman build --network mynet .

使用--MANIFEST选项构建多架构映像(需要仿真软件)

使用指定的体系结构构建映像,并在成功完成时链接到单个清单:

$ podman build --arch arm --manifest myimage /tmp/mysrc
$ podman build --arch amd64 --manifest myimage /tmp/mysrc
$ podman build --arch s390x --manifest myimage /tmp/mysrc

类似地,使用单个命令进行构建

$ podman build --platform linux/s390x,linux/ppc64le,linux/amd64 --manifest myimage /tmp/mysrc

使用多个指定的体系结构构建映像,并在成功完成时链接到单个清单:

$ podman build --platform linux/arm64 --platform linux/amd64 --manifest myimage /tmp/mysrc

使用URL、Git Repo或归档构建图像

构建上下文目录可以指定为指向容器文件的URL、Git存储库或归档的URL。如果URL是容器文件,则将其下载到临时位置并用作上下文。当Git存储库被设置为URL时,该存储库被本地克隆到一个临时位置,然后用作上下文。最后,如果URL是存档,则在用作上下文之前将其下载到临时位置并解压缩。

使用指向容器文件的URL构建图像

从容器下载的构建 Mapfile 下载到用作构建上下文的临时位置:

$ podman build https://10.10.10.1/podman/Containerfile

使用Git存储库构建映像

Podman将指定的GitHub存储库克隆到一个临时位置,并将其用作上下文。使用存储库根目录下的Containerfile,只有当GitHub存储库是专用存储库时,它才起作用。

从指定的GIT存储库下载的构建映像下载到用作构建上下文的临时位置:

$ podman build -t hello  https://github.com/containers/PodmanHello.git
$ podman run hello

注意:GitHub不支持使用 git:// 用于表演 clone 由于其安全指导(https://github.blog/2021-09-01-improving-git-protocol-security-github/).最近的变化而进行操作使用一个 https:// 如果源存储库托管在GitHub上,则为URL。

使用归档的URL构建图像

Podman获取存档文件,将其解压缩,并将其内容用作构建上下文。位于归档根目录的Containerfile和归档的其余部分用作构建的上下文。通过了 -f PATH/Containerfile 选项还会告诉系统在归档内容中查找该文件。

$ podman build -f dev/Containerfile https://10.10.10.1/podman/context.tar.gz

注意:支持的压缩格式有‘xz’、‘bzip2’、‘gzip’和‘Identity’(无压缩)。

文件

.tainerIgnore/.dockerIgnore

如果该文件 .容器忽略.dockerignore 存在于上下文目录中, podman build 阅读其内容。使用 --ignorefile 用于覆盖.tainerIgnore路径位置的选项。Podman在执行Containerfile/Dockerfile中的Copy和Add指令时,使用该内容从上下文目录中排除文件和目录

CONTAINERIGNORE和.DOKERIGNORE文件使用相同的语法;如果这两个文件都在上下文目录中,则PODMAN构建只使用.tainerIgnore。

用户可以在.容器忽略文件中指定一系列UnixShellGLOB,以标识要排除的文件/目录。

Podman支持特殊的通配符字符串 ** 它匹配任意数量的目录(包括零个)。例如, */ .go排除在所有目录中找到的以.go结尾的所有文件。

示例.tainerIgnore文件:

# exclude this content for image
*/*.c
**/output*
src

*/*.c 排除任何顶级子目录中名称以.c结尾的文件和目录。例如,源文件包含/rootless.c。

**/output* 排除以开头的文件和目录 output 从任何目录。

src 排除名为src的文件和目录src以及其中的任何内容。

以!开头的行!(感叹号)可用于例外排除。以下是使用此机制的.tainerIgnore文件示例:

*.doc
!Help.doc

从图像中排除除Help.doc之外的所有文档文件。

此功能与下面介绍的处理.tainerIgnore文件的方式兼容:

https://github.com/containers/common/blob/main/docs/containerignore.5.md

registries.conf (/etc/containers/registries.conf)

Registries.conf是一个配置文件,它指定在完成不包括注册表或域部分的镜像名称时参考哪些容器注册表。

故障排除

上次日志稀疏文件

在具有较大UID/GID的容器文件中使用UserAdd命令可创建较大的稀疏文件 /var/log/lastlog 。这可能会导致构建永远挂起。Go语言不正确支持稀疏文件,可能会导致容器镜像中创建一些巨大的文件。

在使用 useradd 命令,则将 --no-log-init or -l 选项添加到 useradd 指挥部。该选项告诉用户添加停止创建lastlog文件。

另请参阅

podman(1)buildah(1)containers-certs.d(5)containers-registries.conf(5)crun(1)runc(8)useradd(8)podman-ps(1)podman-rm(1)Containerfile(5)containerignore(5)

HISTORY

2020年8月,丹·沃尔什添加了其他选项和.tainerIgnore <dwalsh@redhat.com>

2018年5月,由Joe Doss添加的细微修订 <joe@solidadmin.com>

2017年12月,最初由汤姆·斯威尼汇编 <tsweeney@redhat.com>

FOOTNOTES

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