名称

podman-machine-init - 初始化一个新的虚拟机

简介

podman machine init [选项] [名称]

描述

为 Podman 初始化一个新的虚拟机。

默认的机器名称是 podman-machine-default。如果未指定机器名称作为参数,则新机器将被命名为 podman-machine-default

仅限无根用户。

在 MacOS 和 Windows 上,Podman 需要一个虚拟机。这是因为容器是 Linux 的——容器不能在任何其他操作系统上运行,因为容器的核心功能与 Linux 内核紧密相关。Podman machine 必须用于管理 MacOS 和 Windows 机器,但也可以选择性地用于 Linux。

podman machine init 初始化一个新的 Linux 虚拟机,容器在此虚拟机中运行。会自动生成 SSH 密钥以访问虚拟机,并添加与虚拟机内 root 账户和用户账户的系统连接。

默认情况下,VM 分发版是一个基于自定义 Fedora CoreOS 的镜像,推送到 quay.io/podman/machine-os(在 https://github.com/containers/podman-machine-os 中构建)。WSL 是一个例外,它基于一个自定义的 Fedora 镜像。

要检查您的机器操作系统是否有可用升级,您可以运行以下命令:

$ podman machine ssh 'sudo rpm-ostree upgrade --check'

如果有可用更新,您可以重新运行上述命令并移除 --check,您的操作系统将被更新。更新后,您必须使用 podman machine stop && podman machine start 停止并启动您的机器才能使其生效。

上述机制仅用于更新 podman 的补丁 (Z) 版本。对于新的主版本和次版本 (X.Y) 的更新,请使用 podman machine os apply 命令,更多信息请参阅其文档。

注意:如上所述的更新可能导致主机上的 Podman 与虚拟机中的 Podman 之间出现版本不匹配。执行 podman info 应该会显示两者的版本。Podman 主机和机器版本不匹配的配置是不受支持的。

要更新 WSL 镜像,您必须在内部运行 dnf update,使用以下命令:

$ podman machine ssh dnf update

默认的 Podman 机器设置可以通过 containers.conf(5) 文件中的 [machine] 部分进行设置。

选项

--cpus=number

CPU 数量。

--disk-size=number

访客虚拟机磁盘的大小(GiB)。

--help

打印使用说明。

--ignition-path

ignition 文件的完全限定路径。

如果提供了 ignition 文件,该文件将被复制到用户的 CONF_DIR 并重命名。此外,不会生成 SSH 密钥,也不会建立任何系统连接。假定用户手动执行这些操作或以其他方式处理。

--image

虚拟机镜像的完全限定注册表、路径或 URL。注册表目标必须采用 docker://registry/repo/image:version 的形式。

注意:仅支持 Podman 提供的镜像。

--memory, -m=number

内存(MiB)。注意:1024MiB = 1GiB。

--now

虚拟机初始化后立即启动。

--playbook

将提供的 Ansible playbook 添加到机器并在首次启动后执行。

注意:playbook 将以与虚拟机中用户相同的权限执行。提供的 playbook 不能包含来自主机系统的其他文件,因为它们不会被复制。使用 --playbook 标志将要求镜像包含 Ansible。默认提供的镜像将包含 Ansible。

--rootful

此机器是倾向于 rootful (true) 还是 rootless (false) 容器执行。此选项在没有现有远程连接配置的情况下决定了远程连接的默认设置。

API 转发(如果可用)遵循此设置。

--swap, -s=number

交换空间(MiB)。注意:1024MiB = 1GiB。

渲染一个 zram-generator.conf 文件,其中 zram-size 设置为传递给 --swap 的值。

--timezone

设置机器和容器的时区。有效值是 local 或一个 timezone,例如 America/Chicago。默认值为 local,表示使用机器主机的时区。

时区设置不用于 WSL。WSL 会自动将时区设置为与主机 Windows 操作系统相同。

--tls-verify

在联系注册表时需要 HTTPS 并验证证书(默认:true)。如果明确设置为 true,则使用 TLS 验证。如果设置为 false,则不使用 TLS 验证。如果未指定,则使用 TLS 验证,除非目标注册表在 containers-registries.conf(5) 中列为不安全注册表。

--usb=bus=number,devnum=numbervendor=hexadecimal,product=hexadecimal

通过 USB 直通将主机上的 USB 设备分配给虚拟机。仅支持 QEMU 机器。

设备需要有适当的权限才能传递给机器。这意味着设备需要属于您的用户组。

请注意,使用总线和设备号更简单,但这些值可能会在每次启动或设备拔出时发生变化。

当使用供应商和产品 ID 指定 USB 设备时,如果有多个设备具有相同的供应商和产品 ID,则分配第一个可用的设备。

--user-mode-networking

此选项仅可用于 Windows 上的 WSL 提供程序。在所有其他平台上,此选项将被忽略,并且用户模式网络将始终为 true,因为这些提供程序总是依赖于 gvproxy(我们的虚拟机用户模式网络工具)。

相比之下,Windows/WSL 后端默认为 false,并遵循标准的 WSL 网络设置。在 Windows/WSL 上将此设置更改为 true 会通知 Podman 在此机器实例启动时用用户模式网络分发替换 WSL 网络设置。由于 WSL 在不同分发版之间共享相同的内核,所有其他正在运行的分发版都会重用此网络。同样,当最后一个设置为 true 的机器实例停止时,原始网络设置将恢复。

在某些 VPN 配置中,VPN 可能会丢弃来自其他网络接口(包括虚拟机网络设备)的流量。通过启用用户模式网络,VPN 会将所有 podman 机器流量视为来自主机,从而绕过此问题。

--username

用于在远程虚拟机中执行命令的用户名。FCOS 的默认值为 core,Fedora 的默认值为 user(Windows 主机上的默认值)。应与最终虚拟机镜像中使用的用户名匹配。

--volume, -v=source:target[:options]

将卷从源挂载到目标。

创建一个挂载。如果将 /host-dir:/machine-dir 指定为 *source:target*,Podman 会将主机中的 host-dir 挂载到 Podman 机器中的 machine-dir

可以以逗号分隔的字符串形式指定附加选项。识别的选项有:

  • ro:以只读方式挂载卷

  • rw:以读写方式挂载卷(默认)

  • security_model=[model]:指定 9p 安全模型(见下文)

注意:以下目标禁止用于卷:/bin/boot/dev/etc/home/proc/root/run/sbin/sys/tmp/usr/var。这些目标的子目录是允许的,但用户应谨慎,不要挂载到重要目录,因为可能会出现意外结果。

9p 安全模型 [决定] https://wiki.qemu.org/Documentation/9psetup#Starting_the_Guest_directly 9p 文件系统是否以及如何将某些文件系统操作在主机上实际存储之前进行转换。

为了使符号链接工作,在 MacOS 上,默认安全模型是 none

mapped-xattr 的值指定 9p 将符号链接和一些文件属性作为扩展属性存储在主机上。这适用于主机和访客不需要在共享文件系统上互操作的情况,但对于实际的共享访问存在警告;值得注意的是,主机上的符号链接在访客上不可用,反之亦然。如果需要互操作性,则选择 none,但请记住,访客无法执行运行虚拟机的用户无法执行的操作,例如创建由其他用户拥有的文件。对于只读卷,使用 none 几乎肯定是最佳选择。

示例:-v "$HOME/git:$HOME/git:ro,security_model=none"

默认卷挂载在 containers.conf 中定义。除非更改,默认值为 $HOME:$HOME

关于适用于 Linux 的 Windows 子系统 (WSL) 的注意事项 由于 WSL 默认在启动时将所有驱动器挂载到 /mnt,因此传递 --volume 是多余的,并且没有效果。C: 驱动器的主机主目录将挂载到 /mnt/c/Users/<my username>

示例

初始化默认的 Podman 机器,从互联网拉取内容。

$ podman machine init

初始化指定名称的 Podman 机器,从互联网拉取内容。

$ podman machine init myvm

一步初始化并启动一个新的 Podman 机器。

podman machine init --now

初始化默认的 Podman 机器,从互联网拉取内容,默认为 rootful 模式。默认是 rootless。

$ podman machine init --rootful

初始化默认的 Podman 机器,覆盖其磁盘大小,从互联网拉取内容。

$ podman machine init --disk-size 50

初始化指定的 Podman 机器,覆盖其内存大小,从互联网拉取内容。

$ podman machine init --memory=1024 myvm

初始化默认的 Podman 机器,将主机目录 /Users 挂载到虚拟机中的 /Users

$ podman machine init -v /Users:/Users

初始化默认的 Podman 机器,并指定 USB 设备直通选项。仅支持 QEMU 机器。

$ podman machine init --usb vendor=13d3,product=5406

初始化默认的 Podman 机器,并指定 USB 设备直通选项。仅支持 QEMU 机器。

$ podman machine init --usb bus=1,devnum=3

另请参阅

podman(1), podman-machine(1), containers.conf(5)

历史

2021 年 3 月,由 Ashley Cui acui@redhat.com 初次编译