# 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份额划分:
CPU占有率
100%CPU0
CPU1的100%
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)
文件。
--decryption-key = [Key[:密码短语]]
这个 [key[:passphrase] ]用于图像解密。密钥可以指向密钥和/或证书。尝试使用所有密钥进行解密。如果密钥受密码短语保护,则需要在参数中传递该密钥,否则将被省略。
--device = host-device[:container-device][:permissions]
将主机设备添加到容器中。任选 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=真
注意:如果用户只有通过组的访问权限,则无法从无根容器内部访问设备。这个 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 = 容器文件
指定一个容器文件,该文件包含生成映像的说明,可以是本地文件,也可以是 http 或 https 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
是一个特殊值,它告诉Buildah保留补充组访问权限。
允许容器使用用户的补充组访问权限。如果文件系统或设备只能由无根用户的组访问,则此标志告诉OCI运行时将组访问传递到容器中。目前仅适用于 crun
OCI运行时。注: keep-groups
是独占的,则不能使用此标志指定其他组。
--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_proxy , https_proxy , ftp_proxy , no_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将打印一条错误消息,并使用默认功能运行容器。
--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]
内存限制。一个 unit 可 b (字节), k (千比字节), m (兆字节),或 g (千兆字节)。
允许限制容器可用的内存。如果主机支持交换内存,则 -m 内存设置可以大于物理RAM。如果指定限制为0(不使用 -m ),容器的内存不受限制。实际限制可能四舍五入为操作系统页面大小的倍数(该值非常大,即数百万万亿)。
Cgroup V1无根系统不支持此选项。
--memory-swap = number[unit]
一个等于内存加交换空间的限制值。一个 unit 可 b (字节), k (千比字节), m (兆字节),或 g (千兆字节)。
必须与 -m ( --memory )旗帜。参数值必须大于 -m ( --memory )默认情况下,它被设置为值的两倍 --memory 。
设置 number 至 -1 以启用无限制交换。
Cgroup V1无根系统不支持此选项。
--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-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 。
always , true :始终拉取镜像,如果拉取失败则抛出错误。
missing :仅当本地容器存储中不存在镜像时才拉取。如果找不到镜像且拉取失败,则抛出错误。
never , false :不要拉取镜像,而要使用本地容器存储中的镜像。找不到图像时抛出错误。
newer :如果注册表上的映像比本地容器存储中的映像新,则拉取。当摘要不同时,图像被认为是较新的。比较时间戳容易出错。如果找到本地映像,则会抑制拉入错误。
--quiet , -q
禁止显示输出消息,这些消息指示正在处理的指令以及从注册表中提取图像和写入输出图像时的进度。
--retry = attempts
从注册表拉取映像失败的情况下重试的次数。缺省值为 3 。
--retry-delay = duration
在从注册表拉取映像失败的情况下重试尝试之间的延迟持续时间。缺省值为 2s 。
--rm
成功生成后删除中间容器(默认为True)。
--runtime = path
这个 path 到与OCI兼容的备用运行库,该运行库用于运行 RUN 指示。
注意:您还可以通过设置BUILDAH_RUNTIME环境变量来覆盖默认的运行时。 export BUILDAH_RUNTIME=/usr/local/bin/runc
--runtime-flag = flag
为容器rutime添加全局标志。要列出支持的标志,请查阅所选容器运行时的手册页。
注意:不要将前导--传递给旗帜。要将runc标志--log-Format json传递给Buildah Build,给出的选项是--runtime-mark log-Format=json。
--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
:列入白名单的syscall seccomp Json文件将用作seccomp筛选器
--shm-size = number[unit]
大小 /dev/shm. A unit 可 b (字节), k (千比字节), m (兆字节),或 g (千兆字节)。如果省略单位,则系统使用字节。如果省略大小,则默认为 64m 。什么时候 size 是 0 ,容器对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
从最终图像中取消设置环境变量。
--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]]
创建绑定装载。指定 -v /HOST-DIR:/CONTAINER-DIR
选项,Podman绑定挂载 /HOST-DIR
从主机到 /CONTAINER-DIR
在波德曼集装箱里。
这个 OPTIONS
是逗号分隔的列表,可以是: [1]
[RW|RO]
[Z|Z|O]
[[r] 共享
| [r] 奴隶
| [r] 私人
]
这个 CONTAINER-DIR
必须是绝对路径,如 /src/docs
。这个 HOST-DIR
也必须是绝对路径。Podman捆绑安装了 HOST-DIR
添加到指定的路径。例如,在指定主机路径时 /foo
,Podman复制了 /foo
绑定到主机上的容器文件系统,并将其装载到容器中。
您可以指定多个 -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
装载是将程序包缓存从主机共享到容器中,以加快构建速度。
- Overlay mounts are not currently supported in rootless mode.
- The `O` flag is not allowed to be specified with the `Z` or `z` flags.
装载到容器中的内容被贴上私有标签。在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
意味着坐骑是 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
坐骑。
EXAMPLES
使用本地容器文件构建映像
$ podman build .
$ podman build -f Containerfile.simple .
$ cat $HOME/Containerfile | podman build -f - .
$ podman build -f Containerfile.simple -f Containerfile.notsosimple .
$ podman build -f Containerfile.in $HOME
$ podman build -t imageName .
$ podman build --tls-verify=true -t imageName -f Containerfile.simple .
$ 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 .
$ podman build --security-opt label=level:s0:c100,c200 --cgroup-parent /path/to/cgroup/parent -t imageName .
$ 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 -t imageName .
$ podman build --no-cache -t imageName .
$ podman build --layers --force-rm -t imageName .
$ podman build --no-cache --rm=false -t imageName .
$ podman build --network mynet .
$ 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构建图像
Podman将容器文件下载到一个临时位置,然后将其用作构建上下文。
$ podman build https://10.10.10.1/podman/Containerfile
使用Git存储库构建映像
Podman将指定的GitHub存储库克隆到一个临时位置,并将其用作上下文。使用存储库根目录下的Containerfile,只有当GitHub存储库是专用存储库时,它才起作用。
$ 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*
*/*.c
排除任何顶级子目录中名称以.c结尾的文件和目录。例如,源文件包含/rootless.c。
**/output*
排除以开头的文件和目录 output
从任何目录。
src
排除名为src的文件和目录src以及其中的任何内容。
以!开头的行!(感叹号)可用于例外排除。以下是使用此机制的.tainerIgnore文件示例: