Podman 教程

Podman 管理非 Linux 环境的 Podman 虚拟机

podman machine 是 Podman 专为 macOS/Windows 平台 设计的核心命令(Linux 平台无需此命令,直接原生运行 Podman),用于管理 Podman 依赖的轻量级虚拟机(基于 QEMU/Lima(macOS)、WSL2(Windows)),实现跨平台运行容器的能力。

该命令涵盖虚拟机的创建、启动、停止、删除、配置修改等全生命周期管理,是 macOS/Windows 下使用 Podman 的基础。

核心背景

Linux 是容器的原生运行环境,而 macOS/Windows 无法直接运行 Linux 容器。podman machine 通过创建一个轻量级 Linux 虚拟机(VM),在其中运行 Podman 守护进程,从而让 macOS/Windows 用户无缝使用 Podman 命令。

平台

虚拟机底层技术

默认 VM 系统

macOS

Lima + QEMU

Fedora CoreOS

Windows

WSL2

Fedora/CentOS

注意:Podman 本身的核心特性是「无守护进程(daemonless)」,但 podman machine 为了适配 macOS/Windows 系统,在创建的 Linux 虚拟机内会运行 Podman 守护进程(podman service)—— 这是跨平台适配的特殊场景,并非 Podman 原生架构的改变。

Podman 虚拟机管理

创建虚拟机

初始化 Podman 虚拟机(仅首次使用需执行),支持自定义配置(内存、CPU、磁盘大小等)。例如:

# 创建默认虚拟机(命名为 "podman-machine-default")
podman machine init

# 自定义配置:指定 CPU 核心数、内存、磁盘大小
podman machine init \
  --cpus 4 \          # 4 核 CPU
  --memory 8192 \     # 8GB 内存(单位:MB)
  --disk-size 40 \    # 40GB 磁盘(单位:GB)
  my-podman-vm # 自定义虚拟机名称

关键选项:

  • --cpus N 虚拟机 CPU 核心数(默认 2)

  • --memory N 虚拟机内存大小(MB,默认 2048 → 2GB)

  • --disk-size N 虚拟机磁盘大小(GB,默认 10GB)

  • --volume string 挂载宿主机目录到虚拟机(如 --volume ~/data:/mnt/data)

  • --rootful 以 root 模式运行 Podman 守护进程(默认 rootless)

示例:

C:\Users\Administrator> podman machine init --cpus 4 --memory 8192 --disk-size 40 my-podman-vm
Looking up Podman Machine image at quay.io/podman/machine-os:5.7 to create VM
Getting image source signatures
Copying blob a88eaedde7e2 done   |
Copying config 44136fa355 done   |
Writing manifest to image destination
a88eaedde7e2006df5c34894695ebd1d6beda57d92a4492a5a670ed20609cdf1
Extracting compressed file: my-podman-vm-amd64: done
Importing operating system into WSL (this may take a few minutes on a new WSL install)...
操作成功完成。
Configuring system...
Machine init complete
To start your machine run:

        podman machine start my-podman-vm

启动虚拟机

启动已创建的 Podman 虚拟机,启动后才能执行 podman run/podman pull 等容器命令。用法示例:

(1)启动默认虚拟机 podman machine start

C:\Users\Administrator> podman machine start
Starting machine "podman-machine-default"

This machine is currently configured in rootless mode. If your containers
require root permissions (e.g. ports < 1024), or if you run into compatibility
issues with non-podman clients, you can switch using the following command:

        podman machine set --rootful

API forwarding listening on: npipe:////./pipe/docker_engine

Docker API clients default to this address. You do not need to set DOCKER_HOST.
Machine "podman-machine-default" started successfully

(2)启动指定名称的虚拟机 podman machine start my-podman-vm,虚拟机名为 my-podman-vm

C:\Users\Administrator> podman machine start my-podman-vm
Starting machine "my-podman-vm"

This machine is currently configured in rootless mode. If your containers
require root permissions (e.g. ports < 1024), or if you run into compatibility
issues with non-podman clients, you can switch using the following command:

        podman machine set --rootful my-podman-vm

API forwarding listening on: npipe:////./pipe/docker_engine

Docker API clients default to this address. You do not need to set DOCKER_HOST.
Machine "my-podman-vm" started successfully

停止虚拟机

优雅停止 Podman 虚拟机,释放宿主机资源。用法示例:

(1)停止默认虚拟机

# 停止默认虚拟机
podman machine stop

C:\Users\Administrator> podman machine stop
Machine "podman-machine-default" stopped successfully

(2)停止指定虚拟机

# 停止名为 my-podman-vm 的虚拟机
podman machine stop my-podman-vm

C:\Users\Administrator> podman machine stop my-podman-vm
Machine "my-podman-vm" stopped successfully

进入虚拟机

通过 SSH 进入 Podman 虚拟机的命令行,用于调试虚拟机内的 Podman 配置、查看容器日志等。用法示例:

(1)进入默认虚拟机

# 进入默认虚拟机
podman machine ssh

C:\Users\Administrator> podman machine ssh
Connecting to vm podman-machine-default. To close connection, use `~.` or `exit`
Last login: Tue Dec 16 09:38:54 2025
[user@CDLPF2YBXYD ~]$ ls
custom_volumes  script.sh
[user@CDLPF2YBXYD ~]$

(2)以 root 用户进入虚拟机(调试权限问题)

# 以 root 用户进入虚拟机(调试权限问题)
podman machine ssh --username root

C:\Users\Administrator> podman machine ssh --username root
Connecting to vm podman-machine-default. To close connection, use `~.` or `exit`
[root@CDLPF2YBXYD ~]# ls
bootstrap
[root@CDLPF2YBXYD ~]# pwd
/root
[root@CDLPF2YBXYD ~]#

(3)进入指定虚拟机并执行命令(无需交互)

# 进入指定虚拟机并执行命令(无需交互)
podman machine ssh my-podman-vm "podman ps -a"

C:\Users\Administrator> podman machine ssh my-podman-vm "podman ps -a"
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES

C:\Users\Administrator>

列出虚拟机

查看所有 Podman 虚拟机的状态、名称、资源配置等。用法示例:

# 列出所有虚拟机
podman machine ls

C:\Users\Administrator> podman machine ls
NAME                     VM TYPE     CREATED         LAST UP             CPUS        MEMORY      DISK SIZE
my-podman-vm             wsl         16 minutes ago  Currently running   4           8GiB        40GiB
podman-machine-default*  wsl         5 weeks ago     About a minute ago  4           2GiB        100GiB

查看虚拟机详情

输出虚拟机的完整配置(网络、存储、路径、PID 等),用于排查虚拟机问题。用法示例:

# 查看默认虚拟机详情(JSON 格式)
podman machine inspect

C:\Users\Administrator> podman machine inspect
[
     {
          "ConfigDir": {
               "Path": "C:\\Users\\Administrator\\.config\\containers\\podman\\machine\\wsl"
          },
          "ConnectionInfo": {
               "PodmanSocket": {
                    "Path": "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\podman\\podman-machine-default-api.sock"
               },
               "PodmanPipe": {
                    "Path": "\\\\.\\pipe\\podman-machine-default"
               }
          },
          "Created": "2025-11-07T13:38:32.2581099+08:00",
          "LastUp": "2025-12-16T10:26:32.998744+08:00",
          "Name": "podman-machine-default",
          "Resources": {
               "CPUs": 4,
               "DiskSize": 100,
               "Memory": 2048,
               "USBs": []
          },
          "SSHConfig": {
               "IdentityPath": "C:\\Users\\Administrator\\.local\\share\\containers\\podman\\machine\\machine",
               "Port": 53840,
               "RemoteUsername": "user"
          },
          "State": "stopped",
          "UserModeNetworking": false,
          "Rootful": false,
          "Rosetta": false
     }
]

查看指定虚拟机详情使用 podman machine inspect my-podman-vm 命令,核心输出字段:

  • ConfigPath:虚拟机配置文件路径;

  • ConnectionInfo:Podman 连接信息(如 SSH 地址、端口);

  • Resources:CPU / 内存 / 磁盘配置;

  • State:虚拟机状态(Running/Stopped);

  • Rootful:是否为 root 模式。

修改虚拟机配置

修改已创建虚拟机的配置(内存、CPU、网络等),需重启虚拟机生效。用法示例:

# 修改默认虚拟机内存为 4GB,CPU 为 4 核
podman machine set --memory 4096 --cpus 4

# 开启 rootful 模式
podman machine set --rootful

注意:Podman 在 Windows 上的 machine 分两种类型

  • WSL 后端(默认):基于 Windows Subsystem for Linux 2 构建,无法通过 podman machine set 修改内存,需直接修改 WSL 配置;

  • Hyper-V 后端:传统虚拟机,支持 --memory 等参数修改。

删除虚拟机

删除指定的 Podman 虚拟机(包括磁盘文件),释放宿主机空间。用法示例:

# 删除默认虚拟机(需先停止)
podman machine stop && podman machine rm

# 强制删除(无需停止,直接删除)
podman machine rm --force

# 删除指定虚拟机
podman machine rm my-podman-vm

C:\Users\Administrator\.config\containers\podman\machine\wsl\my-podman-vm.json
C:\Users\ADMINI~1\AppData\Local\Temp\podman\my-podman-vm.sock
C:\Users\ADMINI~1\AppData\Local\Temp\podman\my-podman-vm-gvproxy.sock
C:\Users\ADMINI~1\AppData\Local\Temp\podman\my-podman-vm-api.sock
C:\Users\ADMINI~1\AppData\Local\Temp\podman\my-podman-vm.log
Are you sure you want to continue? [y/N]

# 强制删除(无需停止,直接删除)
podman machine rm --force my-podman-vm

C:\Users\Administrator> podman machine rm --force my-podman-vm
正在注销。
操作成功完成。

C:\Users\Administrator> podman machine ls
NAME                     VM TYPE     CREATED      LAST UP         CPUS        MEMORY      DISK SIZE
podman-machine-default*  wsl         5 weeks ago  10 minutes ago  4           2GiB        100GiB

关键特性

Rootful vs Rootless 模式

  • Rootless 模式(默认):虚拟机内 Podman 以普通用户运行,安全但部分权限受限(如无法绑定 1024 以下端口);

  • Rootful 模式:虚拟机内 Podman 以 root 运行,支持所有容器操作,需通过 podman machine init --rootful 或 podman machine set --rootful 开启。

  

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号