Buildah

出自 ArchWiki

Buildah 是一个有助于构建 开放容器倡议 (OCI) 容器镜像的工具。 Buildah 软件包提供了一个命令行工具,可以用于

  • 从头开始或使用镜像作为起点创建一个工作容器
  • 从工作容器或通过 Dockerfile 中的指令创建一个镜像
  • 镜像可以以 OCI 镜像格式或传统的上游 docker 镜像格式构建
  • 挂载工作容器的根文件系统以进行操作
  • 卸载工作容器的根文件系统
  • 使用容器根文件系统的更新内容作为文件系统层来创建新镜像
  • 删除工作容器或镜像
  • 重命名本地容器

构建容器最广为人知的替代方案是 docker。 请注意,Buildah 不运行容器,为此您可能需要考虑 podman

安装

安装 buildahpodman 软件包,或者对于开发版本,buildah-gitAUR 软件包。

配置

启用对构建非特权容器的支持

此文章或章节正在考虑移除。

原因: 重复了 Podman#设置 subuid 和 subgid。(在 Talk:Buildah 中讨论)

希望使用 Buildah 构建非特权容器的用户需要完成额外的设置步骤,在首次运行 podman 之前

注意: 如果您正在构建专用于运行非特权容器的系统,请在添加任何用户之前按照以下步骤操作。 这样您就不必编辑 /etc/subuid/etc/subgiduseradd 将为您执行此操作,您只需以 root 身份运行 touch /etc/subgidtouch /etc/subuid 即可。

最后,创建 /etc/subuid/etc/subgid 以包含每个能够运行容器的用户的容器化 UID/GID 对的映射。[1] 以下示例适用于 root 用户(和 systemd 系统单元)以及示例用户 buildah

/etc/subuid
buildah:100000:65536
/etc/subgid
buildah:100000:65536

如果您在应用上述更改之前运行了 podman,则在尝试以非特权用户身份拉取镜像时会收到错误。 运行 podman system migrate 以修复它。

如果一切顺利,那么在注销并重新登录后,buildah images 应该不会导致错误

注意: 如果您看到访问 /run/user/0 时出错,那么您可能使用了 su 来成为您正在用于测试的用户 — 您应该以该用户身份登录,因为不带 --login 标志的 su 不会将 XDG_RUNTIME_DIR 和其他环境变量设置为正确的值。

用法

请参阅 Buildah 教程

故障排除

WARN[0000] "/" 不是共享挂载点,这可能会导致无根容器出现问题或缺少挂载点

以无根模式运行的 Buildah/Podman 期望绑定挂载是共享的,检查它是否设置为私有

$ findmnt -o PROPAGATION /
PROPAGATION
private

在这种情况下,请参阅 mount(8) § 共享子树操作临时将挂载设置为共享,使用:

# mount --make-shared /

永久设置它,请编辑 /etc/fstab 并将 shared 选项添加到所需的挂载点并重新启动。 它将产生如下条目:

/etc/fstab
# <device>                                <dir> <type> <options> <dump> <fsck>
UUID=0a3407de-014b-458b-b5c1-848e92a327a3 /     ext4   defaults,shared   0      1

参见