podman run 命令完全指南
podman run 完全拆解:基本语法、后台/交互模式、端口、卷、环境变量、重启策略(systemd 集成)、资源限制——与 docker run 的差异(daemonless/rootless)与迁移要点。
直接回答:podman run [选项] 镜像 [命令] 与 docker run 的常见语法相似——-d/-it/-p/-v/-e/--name/--restart 全部通用;差异在底层:无守护进程(命令直接起容器进程)、rootless 默认(容器跑在你的用户权限下)、原生 systemd/quadlet 集成。
基本语法与高频选项
podman run --rm -it ubuntu:24.04 bash
podman run -d --name web -p 8080:80 -v webdata:/usr/share/nginx/html -e NGINX_HOST=example.com --restart unless-stopped --memory 512m nginx:1.27
常见选项相似,但重启、网络、权限和远程模式仍需验证。
与 Docker 的关键差异
| 维度 | Docker | Podman |
|---|---|---|
| 架构 | 中心 daemon | 无中心 daemon,仍有 conmon 与 OCI runtime |
| 权限 | 默认 rootful | 普通用户运行时 rootless |
| 开机自启 | restart 策略 | systemd quadlet 单元(更原生) |
| 低端口 | rootful 通常可绑定,rootless 受系统限制 | rootless 需 net.ipv4.ip_unprivileged_port_start 放行 |
生产常驻:quadlet 推荐
# ~/.config/containers/systemd/web.container
[Container]
Image=docker.io/library/nginx:stable
PublishPort=127.0.0.1:8080:80
[Service]
Restart=always
[Install]
WantedBy=default.target
systemctl --user daemon-reload && systemctl --user start web——容器纳入 systemd 生命周期,比 restart 策略更可控(依赖、日志、资源全部 systemd 语义)。
Quadlet 示例面向支持 cgroup v2/systemd 的 Linux;macOS/Windows 通常在 Podman machine 虚拟机中运行。生产固定受支持镜像 digest。用户服务如需开机启动、退出登录后常驻,还需经管理员确认后配置 loginctl enable-linger;不要只依赖 --restart。
常见问题(FAQ)
Q:docker 命令脚本能直接用 podman 跑吗?
A:常用命令可迁移,但 alias 不能解决脚本、API 与 Compose provider 差异;涉及 Docker socket/API、Swarm 的部分不兼容。
Q:rootless 容器性能有损耗吗?
A:CPU/计算无感;现代 Podman 常用 pasta,旧版或指定配置可能使用 slirp4netns;检查实际版本和后端。host 模式会放弃网络隔离,不能只因性能改用。
Q:镜像仓库互通吗?
A:完全互通——同一 OCI 标准,Docker Hub 与私有仓库照常推拉。
官方参考
本文依据官方文档整理,示例未在本文中进行运行验证。生产部署需按所用版本、权限和实际负载验证。