技巧杂烩

Podman 快速使用

Podman 可以代替 Docker 使用,快速使用 Podman

Podman

Podman 快速使用

这篇文章面向“快速上手”,覆盖 Podman 的核心概念与常用命令,并补充一些容易踩坑的点(尤其是 rootless 与 macOS/Windows 的 machine)。

1. Podman 是什么

Podman(POD Manager)是一个 无守护进程(daemonless) 的容器与镜像管理工具,用来运行、构建和管理 OCI(Open Container Initiative) 兼容的容器和镜像。整体定位接近 Docker CLI,但实现方式与能力边界略有不同:

 • 无守护进程:不需要类似 dockerd 的常驻后台服务。Podman 命令执行时会通过 fork/exec 直接创建容器进程。

 • 支持 Rootless:普通用户即可运行容器(更安全),但网络、端口映射、权限等会有一些限制与注意事项。

 • Docker CLI 兼容:大多数命令参数可直接替换使用(如 docker runpodman run)。

 • Pod 概念:支持将多个容器放入同一 Pod 共享网络(类似 Kubernetes 的 Pod),并会创建一个 infra 容器来维持命名空间。

 • 镜像标准:完全兼容 OCI 镜像格式,可直接拉取 Docker Hub 等镜像仓库的镜像。

小提示:如果你只是想“把 Docker 命令换成 Podman”,可以先从 podman 常用命令 + podman machine(非 Linux)开始。


2. 基础命令(镜像 / 容器)

# 版本与帮助
podman --version
podman --help
podman run --help

# 镜像:搜索、拉取、查看
podman search nginx
podman pull docker.io/library/nginx:latest
podman images
podman image inspect nginx

# 容器:运行、查看、日志、进入
podman run -d --name mynginx -p 8080:80 nginx
podman ps
podman ps -a
podman logs -f mynginx
podman exec -it mynginx sh   # nginx 镜像通常没有 bash

# 生命周期:停止/启动/重启/删除
podman stop mynginx
podman start mynginx
podman restart mynginx
podman rm mynginx

# 删除镜像
podman rmi nginx

补充几个高频命令:

# 容器详细信息(端口、挂载、网络等)
podman inspect mynginx

# 查看端口映射
podman port mynginx

# 资源占用
podman stats

# 一次性清理已退出的容器(谨慎)
podman container prune

3. Pod 概念与用法

Podman 的 Pod 允许多个容器共享 网络 / IPC /(可选)PID 等命名空间。典型用法是把强耦合的容器(如 web + redis)放到同一个 Pod。

# 创建 Pod,并做端口转发(转发到 Pod 的共享网络命名空间)
podman pod create --name mypod -p 8080:80

# 向 Pod 中添加容器
podman run -d --pod mypod --name web nginx
podman run -d --pod mypod --name cache redis

# 查看 Pod 与容器
podman pod ps
podman ps -a --pod

# 停止 / 启动 Pod
podman pod stop mypod
podman pod start mypod

# 删除 Pod(通常会连带删除 Pod 内容器;可加 -f 强制)
podman pod rm mypod

注意点:

 • Pod 会有一个 infra 容器(类似 pause 容器)用来维持 Pod 的命名空间。

 • Pod 的端口映射通常挂在 Pod 上(podman pod create -p ...),更直观。


4. Rootless 模式(普通用户运行容器)

Rootless 让容器以普通用户权限运行,更安全,但会引入一些常见差异:

# 以当前普通用户运行交互式容器
podman run --rm -it alpine sh

常见注意事项:

 • 低端口映射限制:在许多系统上,rootless 直接绑定 80/443 这类低端口会受限。建议映射到高端口(如 8080/8443),或按系统能力配置后再做低端口绑定。

 • 网络后端差异:rootless 网络通常依赖 slirp4netns 或 pasta/passt 等用户态网络组件。若发现 -p 端口转发不可用或性能偏低,优先检查这些依赖与版本。

 • UID/GID 映射:rootless 依赖 /etc/subuid/etc/subgid 的映射范围;如果你(或管理员)手动改了它们,通常需要运行:

podman system migrate

5. 构建镜像(Containerfile / Dockerfile)

Podman 可以直接构建 OCI 镜像,语法与 Docker 非常接近:

# -t: tag
# . : Containerfile/Dockerfile 所在目录
podman build -t myimage:latest .

# 查看构建出的镜像
podman images | head

6. 一个最小工作流(从拉取到运行)

# 拉取镜像
podman pull nginx

# 运行容器
podman run -d --name web -p 8080:80 nginx

# 查看运行状态
podman ps

# 查看日志
podman logs -f web

# 进入容器(注意:很多镜像只有 sh)
podman exec -it web sh

# 停止与清理
podman stop web
podman rm web

7. Podman VM(macOS / Windows 的 podman machine)

在非 Linux 平台(macOS / Windows)上,Podman 需要通过一个轻量虚拟机提供 Linux 内核环境,podman machine 用来管理这个虚拟机。

# 初始化(创建一台 VM)
podman machine init

# 启动 / 停止
podman machine start
podman machine stop

# 列出 VM
podman machine list

# SSH 进入 VM
podman machine ssh
podman machine ssh "cat /etc/os-release"

# 查看详细信息
podman machine inspect

# 删除 / 重置
podman machine rm
podman machine reset

# 动态修改资源
podman machine set --cpus=4 --memory=8192

常见注意事项:

 • macOS/Windows 下的容器实际运行在 VM 内,文件挂载、网络、性能表现 与 Linux 原生会有差异。

 • 如果你同时装了 Docker Desktop,注意避免 CLI/上下文混淆(尤其是端口占用与环境变量)。


8. (可选)把 Docker 命令“无缝替换”为 Podman

如果你只想快速迁移命令习惯,可以考虑:

# 用 podman-docker 包(部分发行版提供)或手动别名
alias docker=podman

# 验证
podman info

说明:不同系统对 podman-docker 支持与行为可能略有差异;团队环境建议明确写在 README 或开发环境脚本里,避免误会。

文章标题:Podman 快速使用

文章作者:浅小沫

文章链接:https://blog.truimo.com/posts/podman-quick-start


您可以自由在任何媒介以任何形式分享本作品,但需署名,且不得用于商业目的或改编。若分发衍生作品,须采用相同的许可协议。

本博客的所有原创内容采用 CC BY-NC-ND 4.0 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。