名称¶
podman-build.unit - 使用 Podman Quadlet 构建容器镜像的 systemd 单元文件
简介¶
名称.build
描述¶
构建单元(.build
文件)由 Podman Quadlet 用于声明性地定义 systemd 服务,这些服务从 Containerfile
或 Dockerfile
构建容器镜像。
这些单元确保镜像在被容器或卷使用之前,已在主机上构建。如果镜像已存在且上下文未更改,后续执行将由于 Podman 的构建缓存而迅速完成。
它们特别适用于
创建注册表中不存在的镜像
在启动时自动化镜像构建
本地测试和开发管道
一个最小的 .build
文件必须指定
ImageTag=
— 用于命名构建的镜像或者
File=
或者SetWorkingDirectory=
使用摘要¶
.build
文件在启动或重新加载时由 podman-system-generator
解析,生成一个运行 podman build
的 systemd .service
。该服务可以像任何其他单元一样进行管理
systemctl --user start myimage-build.service
生成的镜像可以通过 .container
或 .volume
单元引用
Image=myimage.build
选项¶
[Build]
部分的有效选项如下所示
[Build] 选项 |
podman build 等效 |
---|---|
Annotation=annotation=value |
--annotation=annotation=value |
Arch=aarch64 |
--arch=aarch64 |
AuthFile=/etc/registry/auth.json |
--authfile=/etc/registry/auth.json |
ContainersConfModule=/etc/nvd.conf |
--module=/etc/nvd.conf |
DNS=192.168.55.1 |
--dns=192.168.55.1 |
DNSOption=ndots:1 |
--dns-option=ndots:1 |
DNSSearch=example.com |
--dns-search example.com |
Environment=foo=bar |
--env foo=bar |
File=/path/to/Containerfile |
--file=/path/to/Containerfile |
ForceRM=false |
--force-rm=false |
GlobalArgs=--log-level=debug |
--log-level=debug |
GroupAdd=keep-groups |
--group-add=keep-groups |
ImageTag=localhost/imagename |
--tag=localhost/imagename |
Label=label |
--label=label |
Network=host |
--network=host |
PodmanArgs=--pull never |
--pull never |
Pull=never |
--pull never |
Retry=5 |
--retry=5 |
RetryDelay=10s |
--retry-delay=10s |
Secret=secret |
--secret=id=mysecret,src=path |
SetWorkingDirectory=unit |
设置 systemd 单元文件的 |
Target=my-app |
--target=my-app |
TLSVerify=false |
--tls-verify=false |
Variant=arm/v7 |
--variant=arm/v7 |
Volume=/source:/dest |
--volume /source:/dest |
Annotation=annotation=value [annotation=value ...]
¶
向镜像元数据中添加一个镜像注解(例如 annotation=value)。可以多次使用。
注意:此信息在 Docker 镜像格式中不存在,因此在以 Docker 格式写入镜像时会被丢弃。
Arch=ARCH
¶
覆盖要拉取镜像的架构,默认为主机架构。例如,arm
。除非被覆盖,否则后续在本地存储中查找相同镜像时,将匹配此架构,无论主机如何。
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 完成。
ContainersConfModule=module
¶
加载指定的 containers.conf(5) 模块。
此选项可以列出多次。
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。
DNSOption=option
¶
设置在构建期间使用的自定义 DNS 选项。
DNSSearch=domain
¶
设置在构建期间使用的自定义 DNS 搜索域。
Environment=env=value [env=value ...]
¶
设置环境变量。
此选项允许在容器内启动的进程使用任意环境变量。如果指定的环境变量没有值,Podman 会检查主机环境以获取值,并且只有在主机上设置了该变量时才设置该变量。作为特殊情况,如果指定的环境变量以 * 结尾且没有值,Podman 会在主机环境中搜索以该前缀开头的变量,并将这些变量添加到容器中。
File=Containerfile
¶
指定一个 Containerfile,其中包含构建镜像的指令,可以是本地文件或 http 或 https URL。如果指定了多个 Containerfile,则 FROM 指令仅接受自最后一个指定文件。
请注意,对于 Containerfile 的给定相对路径,或在使用 http(s)://
URL 时,您还必须设置 SetWorkingDirectory=
,以便 podman build
能够找到 Containerfile 中指定资源的有效上下文目录。
请注意,对于 .build
文件,设置 File=
字段是强制性的,除非 SetWorkingDirectory
(或 Service
组中的 WorkingDirectory
)也已设置。
指定选项 File=- 会导致 Containerfile 内容从 stdin 读取。
ForceRM=
¶
总是在构建后移除中间容器,即使构建失败也是如此(默认为 true)。
GlobalArgs=
¶
此键包含在生成的文件中 podman
命令后直接传递的参数列表。它可以用于访问生成器否则不支持的 Podman 功能。由于生成器不知道这些参数可能引起的意外交互,因此不建议使用此选项。
其格式是空格分隔的参数列表,可以选择单独转义以允许包含空格和其他控制字符。
此键可以列出多次。
GroupAdd=group | keep-groups
¶
为在容器进程内运行的主用户分配额外的组。
keep-groups
是一个特殊标志,告诉 Podman 保留补充组访问权限。
允许容器使用用户的补充组访问权限。如果文件系统或设备只能由无根用户的组访问,此标志会告诉 OCI 运行时将组访问权限传递到容器中。目前仅适用于 crun
OCI 运行时。注意:keep-groups
是排他性的,不能与此标志一起指定其他组。(不适用于远程命令,包括 Mac 和 Windows(不包括 WSL2)机器)
ImageTag=imageName
¶
指定如果构建过程成功完成,分配给结果镜像的名称。如果 imageName 不包含注册表名称,则注册表名称 localhost 会被前置到镜像名称中。
Label=label
¶
向镜像元数据添加一个镜像标签(例如 label=value)。可以多次使用。
用户可以在 Containerfile 中设置一个特殊的 LABEL io.containers.capabilities=CAP1,CAP2,CAP3,它指定容器正常运行所需的 Linux 功能列表。容器镜像中指定的此标签告诉 Podman 仅使用这些功能运行容器。Podman 仅在指定功能列表是默认列表的子集时,才使用指定功能启动容器。
如果指定的权能不在默认集合中,Podman 会打印一条错误消息,并使用默认的权能运行容器。
Network=mode
¶
设置处理 RUN
指令时网络命名空间的配置。
特殊情况
如果网络的
name
以.network
结尾,Quadlet 将查找相应的.network
Quadlet 单元。如果找到,Quadlet 将使用单元中设置的网络名称,否则使用systemd-$name
。生成的 systemd 服务包含对为该.network
单元生成的服务单元的依赖,或者如果未找到.network
单元,则依赖于$name-network.service
。注意:相应的.network
文件必须存在。
有效的 mode 值为:
none:无网络。
host:使用 Podman 主机网络栈。注意:host 模式赋予容器对本地系统服务(如 D-bus)的完全访问权限,因此被认为是不安全的。
ns:path:要加入的网络命名空间的路径。
private:为容器创建一个新的命名空间(默认)
<网络名称|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 接口以提高性能
PodmanArgs=
¶
此键包含在生成的文件中直接传递到 podman
命令末尾的参数列表。它可以用于访问生成器否则不支持的 Podman 功能。由于生成器不知道这些参数可能引起的意外交互,因此不建议使用此选项。
其格式是空格分隔的参数列表,可以选择单独转义以允许包含空格和其他控制字符。
此键可以列出多次。
Pull=policy
¶
拉取镜像策略。默认为 missing。
always:总是拉取镜像,如果拉取失败则抛出错误。
missing:仅当镜像不在本地容器存储中时才拉取镜像。如果未找到镜像且拉取失败,则抛出错误。
never:从不拉取镜像,而是使用本地容器存储中的镜像。如果未找到镜像,则抛出错误。
newer:如果注册表上的镜像比本地容器存储中的镜像新,则拉取。当摘要不同时,镜像被认为是新的。比较时间戳容易出错。如果找到本地镜像,则会抑制拉取错误。
Retry=attempts
¶
在仓库和本地存储之间拉取或推送镜像失败时重试的次数。默认为 3。
RetryDelay=duration
¶
在注册表和本地存储之间拉取或推送镜像失败时,重试尝试之间的延迟持续时间。默认是从两秒开始,然后指数退避。当设置此值时使用此延迟,并且不会发生指数退避。
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
注意:更改秘密文件的内容不会触发使用这些秘密的层的重建。
SetWorkingDirectory=path
¶
为 podman build
提供上下文(工作目录)。支持的值包括路径、URL,或特殊键 file
或 unit
,分别用于将上下文目录设置为 File=
键的文件父目录或 Quadlet .build
单元文件的父目录。这允许 Quadlet 解析相对路径。
当使用特殊键(file
或 unit
)之一时,Systemd 服务单元的 Service
组的 WorkingDirectory
字段也将相应设置。或者,用户可以在 .build
文件中显式设置 Service
组的 WorkingDirectory
字段。请注意,如果用户设置了 Service
组的 WorkingDirectory
字段,即使 SetWorkingDirectory
设置为 file
或 unit
,Quadlet 也不会覆盖它。
通过向 SetWorkingDirectory=
提供 URL,您可以指示 podman build
克隆 Git 仓库或下载一个解压到临时位置的归档文件,作为构建上下文。请注意,在这种情况下,Systemd 服务单元的 WorkingDirectory
将保持不变。
请注意,对于 .build
文件,提供上下文目录是强制性的,除非还提供了 File=
键。
Target=stageName
¶
设置要构建的目标构建阶段。当构建具有多个构建阶段的 Containerfile 时,可以使用 --target 按名称指定一个中间构建阶段作为结果镜像的最终阶段。目标阶段之后的命令将被跳过。
TLSVerify=
¶
联系注册表时要求 HTTPS 并验证证书(默认:true)。如果明确设置为 true,则使用 TLS 验证。如果设置为 false,则不使用 TLS 验证。如果未指定,则使用 TLS 验证,除非目标注册表在 containers-registries.conf(5) 中列为不安全注册表
Variant=VARIANT
¶
将要构建的镜像的架构变体(以及如果构建使用基础镜像,则将基础镜像的架构变体)设置为提供的值,而不是使用构建主机的架构变体。
Volume=[[SOURCE-VOLUME|HOST-DIR:]CONTAINER-DIR[:OPTIONS]]
¶
创建绑定挂载。如果指定 -v /HOST-DIR:/CONTAINER-DIR
,Podman 会将主机上的 /HOST-DIR
绑定挂载到 Podman 容器中的 /CONTAINER-DIR
。类似地,-v SOURCE-VOLUME:/CONTAINER-DIR
将主机上的命名卷挂载到容器中。如果不存在此类命名卷,Podman 会创建一个。如果没有给出源,则该卷将作为匿名命名卷创建,具有随机生成的名称,并在通过 --rm
标志或 podman rm --volumes
命令移除时被移除。
特殊情况
如果
SOURCE-VOLUME
以.volume
结尾,则将使用名为systemd-$name
的 Podman 命名卷作为源,并且生成的 systemd 服务将包含对$name-volume.service
的依赖。请注意,相应的.volume
文件必须存在。
(请注意,当使用远程客户端时,包括 Mac 和 Windows(不包括 WSL2)机器,卷是从远程服务器挂载的,不一定是客户端机器。)
OPTIONS 是逗号分隔的列表,可以是一个或多个以下选项:
rw|ro
z|Z
[O]
[U]
[no]copy
[no]dev
[no]exec
[no]suid
[r]bind
[r]shared|[r]slave|[r]private[r]unbindable [1]
idmap[=options]
CONTAINER-DIR
必须是绝对路径,例如 /src/docs
。卷将挂载到容器的此目录中。
如果指定了卷源,它必须是主机上的路径或命名卷的名称。主机路径可以是绝对路径或相对路径;相对路径相对于 Podman 运行的目录解析。如果源不存在,Podman 将返回错误。用户必须预先创建源文件或目录。
任何不以 .
或 /
开头的源都被视为命名卷的名称。如果不存在具有该名称的卷,则会创建它。使用名称创建的卷不是匿名的,并且不会通过 --rm
选项和 podman rm --volumes
命令删除。
指定多个 -v 选项可将一个或多个卷挂载到 。
写保护卷挂载
添加 :ro 或 :rw 选项,分别以只读或读写模式挂载卷。默认情况下,卷以读写方式挂载。请参阅示例。
Chowning Volume Mounts(更改卷挂载的属主)
当命名卷首次挂载到容器时,Podman 在容器初始化期间自动调整卷挂载点的所有权。此 chown 操作在以下条件下发生:
卷尚未被使用(
NeedsChown
设置为 true)卷为空或尚未复制
卷不由外部卷驱动程序管理
卷驱动程序不是“image”
对于具有 id 映射挂载(使用 idmap
选项)的卷,所有权更改会考虑容器的用户命名空间映射,但 id 映射卷保留适当的 UID/GID 映射。对于没有 id 映射的卷,挂载点将更改所有者以匹配容器的进程用户和组,如果启用用户命名空间重新映射,则映射到主机用户命名空间。
如果在新的用户命名空间中创建,容器中的 UID 和 GID 可能对应主机上的另一个 UID 和 GID。
:U
后缀告诉 Podman 根据 内的 UID 和 GID 使用正确的主机 UID 和 GID,以递归方式更改源卷的所有者和组。更改所有权会遍历卷下的文件系统,并更改每个文件上的 UID/GID。如果卷有数千个 inode,此过程将花费很长时间,从而延迟 的启动。
警告:请谨慎使用,因为这会修改主机文件系统。
Labeling Volume Mounts(为卷挂载添加标签)
像 SELinux 这样的标签系统要求对挂载到 中的卷内容进行适当的标签。如果没有标签,安全系统可能会阻止在 中运行的进程使用内容。默认情况下,Podman 不会更改操作系统设置的标签。
要更改上下文中的标签,请在卷挂载中添加两个后缀之一 :z 或 :Z。这些后缀告诉 Podman 重新标记共享卷上的文件对象。z 选项告诉 Podman 两个或更多 共享卷内容。因此,Podman 使用共享内容标签标记内容。共享卷标签允许所有容器读/写内容。Z 选项告诉 Podman 用私有非共享标签标记内容。只有当前 可以使用私有卷。
注意:pod
中的所有容器共享相同的 SELinux 标签。这意味着该 pod 中的所有容器都可以读/写通过在任何一个容器上使用 :Z
创建的共享到容器中的卷。重新标记会遍历卷下的文件系统并更改每个文件上的标签;如果卷有数千个 inode,此过程将花费很长时间,从而延迟 的启动。如果卷以前使用 z
选项重新标记,则 Podman 会优化以不进行第二次重新标记。如果文件移动到卷中,则可以使用 chcon -Rt container_file_t PATH
命令手动更改标签。
注意:不要重新标记系统文件和目录。重新标记系统内容可能会导致机器上的其他受限服务失败。对于这些类型的容器,我们建议禁用 SELinux 分离。选项 --security-opt label=disable 禁用 的 SELinux 分离。例如,如果用户想将其整个主目录挂载到 中,则需要禁用 SELinux 分离。
$ podman --security-opt label=disable -v $HOME:/home/user fedora touch /home/user/file
Overlay Volume Mounts(覆盖卷挂载)
:O
标志告诉 Podman 使用 overlay file system
将主机目录作为临时存储挂载。进程可以修改挂载点内的内容,这些内容存储在容器存储中的单独目录中。在 overlay 术语中,源目录是下层,容器存储目录是上层。挂载点的修改在 执行完成后被销毁,类似于 tmpfs 挂载点被卸载。
对于高级用户,overlay 选项还支持自定义非易失性 upperdir 和 workdir 用于 overlay 挂载。自定义 upperdir 和 workdir 可以由用户自行完全管理,Podman 在生命周期完成后不会将其删除。示例 :O,upperdir=/some/upper,workdir=/some/work
容器的后续执行会看到原始源目录内容,之前执行的任何更改将不再存在。
overlay 挂载的一个用例是将主机上的包缓存共享到容器中以加快构建速度。
注意:O
标志与上面列出的其他选项冲突。
挂载到容器中的内容被标记为私有标签。在 SELinux 系统上,源目录中的标签必须可被容器标签读取。通常,容器可以读/执行 container_share_t
,并且可以读/写 container_file_t
。如果无法更改源卷上的标签,则必须禁用容器的 SELinux 分离才能使容器工作。
请勿通过 overlay 挂载修改挂载到 的源目录,这可能会导致意外故障。仅在容器运行完成后修改目录。
挂载传播
默认情况下,绑定挂载的卷是 private
。这意味着在 内部进行的任何挂载在主机上都不可见,反之亦然。可以通过指定卷挂载传播属性来改变此行为。当卷是 shared
时,在该卷下在 内部进行的挂载在主机上可见,反之亦然。将卷设置为 slave[1] 仅启用单向挂载传播:在主机上在该卷下进行的挂载在容器内部可见,但反之则不然。
要控制卷的挂载传播属性,可以使用 [r]shared、[r]slave、[r]private 或 [r]unbindable 传播标志。传播属性只能为绑定挂载的卷指定,不能为内部卷或命名卷指定。为了使挂载传播工作,源挂载点(源目录挂载到的挂载点)必须具有正确的传播属性。对于共享卷,源挂载点必须是共享的。对于从属卷,源挂载点必须是共享或从属的。 [1]
要将卷及其所有子挂载递归挂载到 中,请使用 rbind 选项。默认情况下使用 bind 选项,并且源目录的子挂载不会挂载到 中。
使用 copy 选项挂载卷会告诉 podman 将基础目标目录中的内容复制到新创建的内部卷。copy 仅在卷的初始创建时发生。当卷随后在不同容器上使用时,内容不会被复制。copy 选项在绑定挂载上被忽略且无效。
使用 nosuid 选项挂载卷意味着卷上的 SUID 可执行文件不能被应用程序用于更改其权限。默认情况下,卷以 nosuid 挂载。
使用 noexec 选项挂载卷意味着卷上的任何可执行文件都不能在 中执行。
使用 nodev 选项挂载卷意味着卷上的任何设备都不能被 中的进程使用。默认情况下,卷以 nodev 挂载。
如果 HOST-DIR 是挂载点,则 dev、suid 和 exec 选项会被内核忽略。
使用 df HOST-DIR 找出源挂载点,然后使用 findmnt -o TARGET,PROPAGATION 源挂载目录 找出源挂载点的传播属性。如果 findmnt(1) 工具不可用,则可以在 /proc/self/mountinfo 中查看源挂载点的挂载条目。查看“可选字段”并查看是否指定了任何传播属性。在那里,shared:N 表示挂载是共享的,master:N 表示挂载是从属的,如果什么都没有,则挂载是私有的。 [1]
要更改挂载点的传播属性,请使用 mount(8) 命令。例如,如果想绑定挂载源目录 /foo,可以执行 mount --bind /foo /foo 和 mount --make-private --make-shared /foo。这将把 /foo 转换为共享挂载点。或者,可以直接更改源挂载点的传播属性。假设 / 是 /foo 的源挂载点,则使用 mount --make-shared / 将 / 转换为共享挂载点。
注意:如果用户仅通过组拥有访问权限,则从无根内部访问卷会失败。
ID映射挂载
如果指定了 idmap
,则创建到容器中目标用户命名空间的 id 映射挂载。idmap 选项支持自定义映射,该映射可以与容器使用的用户命名空间不同。映射可以在 idmap 选项之后指定,例如:idmap=uids=0-1-10#10-11-10;gids=0-100-10
。对于每个三元组,第一个值是映射到主机上第二个值的后端文件系统 ID 的起始值。此映射的长度在第三个值中给出。多个范围用 # 分隔。
示例¶
简单构建¶
[Build]
ImageTag=localhost/myapp
File=Containerfile
SetWorkingDirectory=unit
从 Git 仓库¶
[Build]
ImageTag=localhost/mygitimage
File=Containerfile
SetWorkingDirectory=https://github.com/example/repo.git
使用秘密构建¶
[Build]
ImageTag=localhost/secureimage
Secret=mysecret
另请参阅¶
[podman-quadlet(7)]