名称

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 密钥会自动生成以访问 VM,并且系统连接到 VM 内部的 root 帐户和用户帐户会被添加。

默认情况下,VM 发行版为 Fedora CoreOS,除了基于自定义 Fedora 镜像的 WSL 之外。虽然 Fedora CoreOS 升级每 14 天发布一次,但 Podman machine 会禁用自动更新机制 Zincata。

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

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

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

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

有关更新和高级配置的更多信息,请参阅 Fedora CoreOS 文档中的 自动更新更新策略

Fedora CoreOS 升级每 14 天发布一次,并会自动检测和安装。VM 会在升级期间重启。有关更新和高级配置的更多信息,请参阅 Fedora CoreOS 文档中的 自动更新更新策略

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

选项

--cpus=数量

CPU 数量。

--disk-size=数量

访客 VM 磁盘大小(GiB)。

--help

打印使用说明。

--ignition-path

ignition 文件的完整限定路径。

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

--image

指向 VM 镜像的完整限定注册表、路径或 URL。注册表目标必须采用 docker://registry/repo/image:version 的形式。

--memory, -m=数量

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

--now

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

--rootful

此机器是否优先使用有根用户 (true) 或无根用户 (false) 容器执行。此选项决定了在没有现有的远程连接配置的情况下,远程连接的默认值。

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

--timezone

设置机器和容器的时区。有效值为 localtimezone(例如 America/Chicago)。local 值(默认值)表示使用机器主机的时区。

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

--usb=bus=数量,devnum=数量vendor=十六进制,product=十六进制

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

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

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

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

--user-mode-networking

表示此机器将来自访客的流量通过在主机上运行的用户空间进程中继。在某些 VPN 配置中,VPN 可能会丢弃来自备用网络接口(包括 VM 网络设备)的流量。通过启用用户模式网络 ( true 设置),VPN 将观察到所有 podman machine 流量来自主机,绕过这个问题。

当使用 qemu 后端(Linux、Mac)时,用户模式网络是强制性的,并且唯一允许的值为 true。相反,Windows/WSL 后端默认为 false,并遵循标准的 WSL 网络设置。将此设置更改为 true 在 Windows/WSL 上会通知 Podman 在此机器实例启动时用用户模式网络分发替换 WSL 网络设置。由于 WSL 在分发之间共享同一个内核,所以所有其他正在运行的分发都会重用这个网络。同样,当最后一个具有 true 设置的机器实例停止时,原始网络设置将被恢复。

--username

用于在远程 VM 中执行命令的用户名。默认值为 FCOS 的 core 和 Fedora 的 user(Windows 主机上的默认值)。应该与结果 VM 镜像中使用的用户名匹配。

--volume, -v=源:目标[:选项]

将卷从源挂载到目标。

创建挂载点。如果 *源:目标* 被指定为 /主机目录:/机器目录,Podman 会将主机中的 主机目录 挂载到 Podman machine 中的 机器目录

可以指定其他选项作为逗号分隔的字符串。识别的选项有

  • ro: 以只读方式挂载卷

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

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

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

关于 Windows Subsystem for Linux (WSL) 的注意事项 由于所有驱动器在 WSL 中启动时默认都会挂载在 /mnt 下,所以传递 --volume 是多余的,没有效果。对于 C: 驱动器,主机的 home 目录会挂载在 /mnt/c/Users/<我的用户名> 下。

示例

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

$ podman machine init

为指定的名称初始化一个 Podman machine,从互联网上拉取内容。

$ podman machine init myvm

初始化默认的 Podman machine,从互联网上拉取内容,默认使用有根用户模式。默认情况下为无根用户模式。

$ podman machine init --rootful

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

$ podman machine init --disk-size 50

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

$ podman machine init --memory=1024 myvm

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

$ podman machine init -v /Users:/Users

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

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

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

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

另请参阅

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

历史记录

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