<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>DevOps on 我的博客</title><link>https://blog.5616760.com/tags/devops/</link><description>Recent content in DevOps on 我的博客</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Wed, 07 Oct 2026 19:10:00 +0800</lastBuildDate><atom:link href="https://blog.5616760.com/tags/devops/index.xml" rel="self" type="application/rss+xml"/><item><title>Podman 入门全指南：从零开始，用更安全的方式跑容器</title><link>https://blog.5616760.com/0036.html</link><pubDate>Wed, 07 Oct 2026 19:10:00 +0800</pubDate><guid>https://blog.5616760.com/0036.html</guid><description>&lt;p&gt;如果你用 Docker Desktop 跑过容器，多半遇到过这几件事：开机后进程里常驻一个 &lt;code&gt;com.docker.backend&lt;/code&gt;，风扇转个不停；公司发了通知说 Docker Desktop 商业授权要收费；或者只是想让容器以普通用户身份跑，却发现默认还得靠一个 root 权限的守护进程。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Podman 就是为解这些痛点而生的。&lt;/strong&gt; 它和 Docker 的命令几乎一样，但架构完全不同：没有常驻的守护进程（daemonless），默认以普通用户身份运行容器（rootless）。换句话说，&lt;strong&gt;你的 &lt;code&gt;docker run&lt;/code&gt; 换个词就能跑，但底层更干净、更安全。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;这篇是写给新手的从零教程。不讲太多原理八卦，重点是把&amp;quot;装好 → 跑起来 → 会日常用 → 能排错 → 敢从 Docker 迁过来&amp;quot;这条路径走通。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;说明&lt;/strong&gt;：本文命令基于 Podman v5 及以上版本（当前最新为 v6.1.3，2026-09-29 发布），主要实验环境为 Windows 11 + WSL2 Ubuntu 与原生 Linux。macOS 与 Linux 的差异会单独标注。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h2 id="目录"&gt;目录&#10;&lt;/h2&gt;&lt;ol&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e4%b8%80podman-%e5%88%b0%e5%ba%95%e6%98%af%e4%bb%80%e4%b9%88" &gt;Podman 到底是什么&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e4%ba%8c%e5%ae%83%e5%92%8c-docker-%e7%9a%84%e6%9c%ac%e8%b4%a8%e5%8c%ba%e5%88%ab" &gt;它和 Docker 的本质区别&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e4%b8%89%e5%ae%89%e8%a3%85%e4%b8%89%e6%9d%a1%e8%b7%af%e7%ba%bf%e9%80%89%e4%b8%80%e6%9d%a1" &gt;安装：三条路线选一条&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%9b%9b%e7%ac%ac%e4%b8%80%e4%b8%aa%e5%ae%b9%e5%99%a8%e4%bb%8e%e8%bf%99%e9%87%8c%e5%bc%80%e5%a7%8b%e5%8a%a8%e6%89%8b" &gt;第一个容器：从这里开始动手&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e4%ba%94%e6%97%a5%e5%b8%b8%e5%91%bd%e4%bb%a4%e9%80%9f%e6%9f%a5%e5%92%8c-docker-%e9%80%90%e6%9d%a1%e5%af%b9%e7%85%a7" &gt;日常命令速查：和 Docker 逐条对照&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%85%ad%e9%95%9c%e5%83%8f%e6%9e%84%e5%bb%ba%e6%8e%a8%e9%80%81%e4%b8%8e%e5%af%bc%e5%85%a5%e5%af%bc%e5%87%ba" &gt;镜像：构建、推送与导入导出&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e4%b8%83%e8%bf%9b%e9%98%b6%e9%87%8d%e7%82%b9podcompose-%e4%b8%8e-systemd" &gt;进阶重点：Pod、compose 与 systemd&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%85%abrootless-%e6%9d%83%e9%99%90%e6%a8%a1%e5%9e%8b%e6%96%b0%e6%89%8b%e6%9c%80%e5%ae%b9%e6%98%93%e5%8d%a1%e7%9a%84%e5%9c%b0%e6%96%b9" &gt;rootless 权限模型：新手最容易卡的地方&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e4%b9%9d%e5%b8%b8%e8%a7%81%e9%97%ae%e9%a2%98%e4%b8%8e%e6%8e%92%e9%94%99%e6%b8%85%e5%8d%95" &gt;常见问题与排错清单&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%8d%81%e4%bb%8e-docker-%e8%bf%81%e7%a7%bb%e4%b8%80%e4%bb%bd%e5%8f%af%e7%9b%b4%e6%8e%a5%e6%89%a7%e8%a1%8c%e7%9a%84%e6%b8%85%e5%8d%95" &gt;从 Docker 迁移：一份可直接执行的清单&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%8d%81%e4%b8%80%e8%af%a5%e4%b8%8d%e8%af%a5%e6%8d%a2%e9%80%82%e7%94%a8%e4%b8%8e%e4%b8%8d%e9%80%82%e7%94%a8%e5%9c%ba%e6%99%af" &gt;该不该换：适用与不适用场景&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;&lt;img alt="图：Podman 封面插画——海豹吉祥物与轻量容器" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.5616760.com/img/0036-001.png"&gt;&lt;/p&gt;&#10;&lt;h2 id="一podman-到底是什么"&gt;一、Podman 到底是什么&#10;&lt;/h2&gt;&lt;p&gt;一句话定义：&lt;strong&gt;Podman（Pod Manager）是一个管理 OCI 容器与镜像的命令行工具，能跑容器、管镜像、管卷、管 Pod，且不需要守护进程。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;它的几个身份标签：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;属性&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;说明&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;开源协议&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Apache-2.0&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;开发方&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Red Hat 主导，&lt;code&gt;containers&lt;/code&gt; 组织维护&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;仓库热度&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;GitHub 约 33,000 star、3,400 fork（&lt;code&gt;podman-container-tools/podman&lt;/code&gt;）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;官网&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://podman.io" target="_blank" rel="noopener"&#10; &gt;https://podman.io&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;当前版本&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;v6.1.3（2026-09-29）；v5.x 是当前应用最广的稳定系列&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;图形界面&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Podman Desktop v1.29.3（CNCF Sandbox 项目）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;strong&gt;这里要特别点出一个容易混淆的事&lt;/strong&gt;：Podman 是一个 CLI 工具，Podman Desktop 是它的图形前端。&lt;strong&gt;两者可以分开装&lt;/strong&gt;——你可以只用命令行 Podman，也可以只用 Desktop。新手如果想少打命令，建议两个都装（见第三节）。&lt;/p&gt;&#10;&lt;h3 id="它由哪几个工具组成"&gt;它由哪几个工具组成&#10;&lt;/h3&gt;&lt;p&gt;真正动手时你会发现，Podman 的生态里其实是一组分工明确的工具：&lt;/p&gt;&#10;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart LR&#10; A["podman&lt;br/&gt;容器生命周期管理"] --&gt; D["OCI 镜像 / 容器"]&#10; B["buildah&lt;br/&gt;构建镜像"] --&gt; D&#10; C["skopeo&lt;br/&gt;镜像搬运/检查"] --&gt; D&#10; D --&gt; E["containers/storage&lt;br/&gt;本地镜像与容器存储"]&#10; A --&gt; F["crun / runc&lt;br/&gt;底层运行时"]&#10; F --&gt; G["Linux 内核&lt;br/&gt;namespace + cgroup"]&#10;&#10; style A fill:#3b82f6,stroke:#1e40af,color:#fff&#10; style B fill:#8b5cf6,stroke:#6d28d9,color:#fff&#10; style C fill:#14b8a6,stroke:#0f766e,color:#fff&#10; style F fill:#f59e0b,stroke:#b45309,color:#fff&lt;/pre&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;podman&lt;/strong&gt;：主角，管容器的生老病死（run/stop/rm/ps/inspect…）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;buildah&lt;/strong&gt;：专职构建镜像（&lt;code&gt;podman build&lt;/code&gt; 底层就调它）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;skopeo&lt;/strong&gt;：不落地地搬运、检查、复制镜像，比如把镜像从 Docker Hub 直接同步到私有仓库&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;crun / runc&lt;/strong&gt;：真正的运行时，负责创建内核 namespace 和 cgroup。Podman 默认用 &lt;strong&gt;crun&lt;/strong&gt;（Red Hat 自研，C 语言写的，启动更快、内存占用更低）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;给新手的建议&lt;/strong&gt;：一开始只需要 &lt;code&gt;podman&lt;/code&gt; 一个命令就够了。&lt;code&gt;buildah&lt;/code&gt; 和 &lt;code&gt;skopeo&lt;/code&gt; 等你需要写 CI 脚本或做镜像搬运时再深入。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="二它和-docker-的本质区别"&gt;二、它和 Docker 的本质区别&#10;&lt;/h2&gt;&lt;p&gt;这是全篇最值得花时间理解的一节。命令的相似是&amp;quot;表面功夫&amp;quot;，架构的不同才是&amp;quot;为什么用它&amp;quot;的答案。&lt;/p&gt;&#10;&lt;h3 id="21-核心架构对比"&gt;2.1 核心架构对比&#10;&lt;/h3&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart TB&#10; subgraph docker["Docker 架构"]&#10; direction LR&#10; DC["docker CLI"] --&gt; DD["dockerd 守护进程&lt;br/&gt;（root，常驻）"]&#10; DD --&gt; DR["containerd → runc"]&#10; DR --&gt; DC1["容器"]&#10; end&#10;&#10; subgraph podman["Podman 架构"]&#10; direction LR&#10; PC["podman CLI"] --&gt; PR["crun / runc&lt;br/&gt;（普通用户进程）"]&#10; PR --&gt; PC1["容器"]&#10; end&#10;&#10; style DD fill:#ef4444,stroke:#b91c1c,color:#fff&#10; style DC fill:#94a3b8,stroke:#475569,color:#fff&#10; style PC fill:#3b82f6,stroke:#1e40af,color:#fff&#10; style PR fill:#10b981,stroke:#047857,color:#fff&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Docker 的模式是&amp;quot;客户端 - 服务端&amp;quot;&lt;/strong&gt;：你敲 &lt;code&gt;docker run&lt;/code&gt;，本质上只是给后台常驻的 &lt;code&gt;dockerd&lt;/code&gt; 发了个请求，真正建容器的是那个 root 权限的守护进程。所有容器都挂在这一个进程底下，&lt;strong&gt;它是单点，也是权限放大的来源&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Podman 的模式是&amp;quot;直接 fork&amp;quot;&lt;/strong&gt;：你敲 &lt;code&gt;podman run&lt;/code&gt;，Podman 进程自己就去创建容器了，做完就退出。&lt;strong&gt;没有中间商&lt;/strong&gt;。容器直接是 Podman 的子进程，用普通用户的身份创建，天然不需要 root。&lt;/p&gt;&#10;&lt;h3 id="22-六个关键差异"&gt;2.2 六个关键差异&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;维度&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Docker&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Podman&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;守护进程&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;必须常驻 &lt;code&gt;dockerd&lt;/code&gt;（root）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;无守护进程，用完即退&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;默认权限&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;容器由 root 守护进程创建&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;默认 rootless，以当前用户身份运行&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;安全边界&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;攻破 dockerd ≈ 拿到 root&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;攻破容器 ≈ 只拿到普通用户权限&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Pod 概念&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;需要 Kubernetes 才有&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;原生支持 &lt;code&gt;podman pod&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;systemd 集成&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;需额外配置&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;原生 &lt;code&gt;podman generate systemd&lt;/code&gt; / Quadlet&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;开机自启&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;由 Docker 服务统一管理&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;由 systemd 用户服务管理，可精确到单个容器&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;命令兼容&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;—&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;高度兼容 Docker CLI&lt;/strong&gt;，多数命令直接换名可用&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;授权成本&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Docker Desktop 对部分企业收费&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;完全免费开源&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="23-一句话记法"&gt;2.3 一句话记法&#10;&lt;/h3&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;Docker 像&amp;quot;总公司 + 派工单&amp;quot;：所有活都由总部那个大管家接单再分派。&lt;/strong&gt;&#10;&lt;strong&gt;Podman 像&amp;quot;个体户自己上手&amp;quot;：你叫它干活，它自己就干完了，不用惊动任何人。&lt;/strong&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="24-那-docker-还有什么优势"&gt;2.4 那 Docker 还有什么优势&#10;&lt;/h3&gt;&lt;p&gt;不吹不黑，交换条件在这里：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;生态成熟度&lt;/strong&gt;：Docker Compose、Docker Desktop 的图形化体验、插件市场、文档量，仍然是第一梯队。Podman 的 compose 靠 &lt;code&gt;podman-compose&lt;/code&gt; 或 &lt;code&gt;podman compose&lt;/code&gt; 提供，偶有兼容边角问题。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;单机开发体验&lt;/strong&gt;：Docker Desktop 在 macOS/Windows 上的&amp;quot;开箱即用&amp;quot;做得更顺（Podman 需要先 &lt;code&gt;podman machine init&lt;/code&gt;）。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Kubernetes 本地开发&lt;/strong&gt;：kind、minikube 默认以 Docker 为主。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;结论&lt;/strong&gt;：&lt;strong&gt;学习/个人/安全敏感场景，Podman 很香；企业重度依赖 Docker Compose 复杂编排时，迁移要评估成本。&lt;/strong&gt; 好消息是二者可以共存，后面第十节会给共存方案。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="三安装三条路线选一条"&gt;三、安装：三条路线选一条&#10;&lt;/h2&gt;&lt;p&gt;Podman 在 Linux 上是&amp;quot;原生居民&amp;quot;，在 Windows / macOS 上则需要一个 Linux 虚拟机（Podman Machine）。&lt;strong&gt;请先确认你在哪个平台，再走对应的路。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h3 id="31-路线-alinux最推荐体验最完整"&gt;3.1 路线 A：Linux（最推荐，体验最完整）&#10;&lt;/h3&gt;&lt;p&gt;以 Ubuntu / Debian 为例：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install -y podman&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman --version&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Fedora / RHEL / CentOS Stream（原生支持最好，版本最新）：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo dnf install -y podman&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;⚠️ &lt;strong&gt;踩坑预警&lt;/strong&gt;：Ubuntu 22.04 官方源里的 Podman 版本偏旧（3.4.x 级别），可能导致 Podman Desktop 连不上。若要新版本，改用官方仓库：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;. /etc/os-release&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;echo &lt;span style="color:#e6db74"&gt;&amp;#34;deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_&lt;/span&gt;&lt;span style="color:#e6db74"&gt;${&lt;/span&gt;VERSION_ID&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;/ /&amp;#34;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -L &lt;span style="color:#e6db74"&gt;&amp;#34;https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_&lt;/span&gt;&lt;span style="color:#e6db74"&gt;${&lt;/span&gt;VERSION_ID&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;/Release.key&amp;#34;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; | sudo apt-key add -&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt update &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo apt install -y podman buildah skopeo&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;Linux 上装完直接用，&lt;strong&gt;不需要初始化虚拟机&lt;/strong&gt;，也没有 &lt;code&gt;podman machine&lt;/code&gt; 这一步。&lt;/p&gt;&#10;&lt;h3 id="32-路线-bwindows主流做法是走-wsl2"&gt;3.2 路线 B：Windows（主流做法是走 WSL2）&#10;&lt;/h3&gt;&lt;p&gt;Windows 上跑 Podman 有两种姿势，按你的需求选：&lt;/p&gt;&#10;&lt;h4 id="姿势-1装-podman-desktop图形界面新手友好"&gt;姿势 1：装 Podman Desktop（图形界面，新手友好）&#10;&lt;/h4&gt;&lt;ol&gt;&#10;&lt;li&gt;到 &lt;a class="link" href="https://podman-desktop.io" target="_blank" rel="noopener"&#10; &gt;https://podman-desktop.io&lt;/a&gt; 下载 Windows 安装包&lt;/li&gt;&#10;&lt;li&gt;建议下载&lt;strong&gt;官网的 &lt;code&gt;.exe&lt;/code&gt; 安装包&lt;/strong&gt;，而不是 Microsoft Store 的 MSIX 版本（MSIX 版本偶有权限与路径问题）&lt;/li&gt;&#10;&lt;li&gt;安装时勾选 &lt;strong&gt;&amp;ldquo;Add to PATH&amp;rdquo;&lt;/strong&gt;，方便后续命令行调用&lt;/li&gt;&#10;&lt;li&gt;首次启动会引导你创建一个 Podman Machine（本质是 WSL2 里的一台轻量虚拟机）&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h4 id="姿势-2直接在-wsl2-的-ubuntu-里装推荐给开发人员"&gt;姿势 2：直接在 WSL2 的 Ubuntu 里装（推荐给开发人员）&#10;&lt;/h4&gt;&lt;p&gt;如果你本来就有 WSL2，这是最舒服的方式——&lt;strong&gt;Podman 直接装在一个真正的 Linux 里，行为与服务器完全一致&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 在 WSL2 Ubuntu 中执行&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt update &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo apt install -y podman&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman --version&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;💡 &lt;strong&gt;重要差异&lt;/strong&gt;：&lt;strong&gt;WSL2 里不用 &lt;code&gt;podman machine&lt;/code&gt;&lt;/strong&gt;。因为你已经在 Linux 里了，Podman 直接跑在 WSL2 的内核上。&lt;code&gt;podman machine&lt;/code&gt; 是给&amp;quot;在 Windows 上模拟 Linux&amp;quot;准备的，WSL2 路线不需要。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;如果你的网络环境访问 &lt;code&gt;download.opensuse.org&lt;/code&gt; 较慢，也可以先在 WSL2 里用系统源装，够用即可。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;关于 WSL2 的补充&lt;/strong&gt;：Podman 与 Docker 在 WSL2 里可以并存。如果你之前用 Docker Desktop 的 WSL 集成，注意两者对 &lt;code&gt;docker&lt;/code&gt; 命令的接管关系（见第十节）。&lt;/p&gt;&#10;&lt;h3 id="33-路线-cmacos"&gt;3.3 路线 C：macOS&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;通过 Homebrew 安装 CLI：&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew install podman&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="2"&gt;&#10;&lt;li&gt;&lt;strong&gt;初始化虚拟机&lt;/strong&gt;（macOS 上没有原生 Linux 内核，必须有这一步）：&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman machine init --cpus &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt; --memory &lt;span style="color:#ae81ff"&gt;8192&lt;/span&gt; --disk-size &lt;span style="color:#ae81ff"&gt;50&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman machine start&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="3"&gt;&#10;&lt;li&gt;想用图形界面就再装 Podman Desktop（&lt;a class="link" href="https://podman-desktop.io" target="_blank" rel="noopener"&#10; &gt;https://podman-desktop.io&lt;/a&gt;）。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;⚠️ &lt;strong&gt;macOS 上的资源要提前给够&lt;/strong&gt;：默认虚拟机的 CPU / 内存偏小，跑稍重的镜像会卡。建议至少 &lt;code&gt;--cpus 4 --memory 8192&lt;/code&gt;（8 GB），磁盘 50 GB。&lt;strong&gt;如果虚拟机已建好才发现不够，需要先 &lt;code&gt;podman machine rm&lt;/code&gt; 再重新 &lt;code&gt;init&lt;/code&gt;&lt;/strong&gt;，或在 Desktop 里调整机器配置。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="34-安装后的第一步自检"&gt;3.4 安装后的第一步自检&#10;&lt;/h3&gt;&lt;p&gt;不管哪条路线，装完先跑这三条命令确认环境健康：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman --version &lt;span style="color:#75715e"&gt;# 版本号&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman info &lt;span style="color:#75715e"&gt;# 环境详情：runtime、rootless 与否、存储驱动&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman run --rm hello-world&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;podman info&lt;/code&gt; 里重点看两处：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;host&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;security&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;rootless&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt; &lt;span style="color:#75715e"&gt;# ← Windows/macOS 下通常是 false（在虚拟机里是 root）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Linux 下应为 true，说明 rootless 生效&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果最后一条 &lt;code&gt;hello-world&lt;/code&gt; 能打印出提示语，说明&lt;strong&gt;拉镜像、建容器、跑进程、销毁容器&lt;/strong&gt;这条完整链路已经通了。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="四第一个容器从这里开始动手"&gt;四、第一个容器：从这里开始动手&#10;&lt;/h2&gt;&lt;p&gt;这一节的所有命令，&lt;strong&gt;在 Linux / WSL2 里可以直接跑&lt;/strong&gt;；Windows、macOS 用户请先确认 &lt;code&gt;podman machine&lt;/code&gt; 已在运行（&lt;code&gt;podman machine list&lt;/code&gt;）。&lt;/p&gt;&#10;&lt;h3 id="41-跑一个一次性容器"&gt;4.1 跑一个一次性容器&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman run --rm hello-world&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;拆解这四个部分，这是 Podman（也是 Docker）命令的通用结构：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;片段&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;含义&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;主命令&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;run&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;子命令：创建并启动一个容器&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;--rm&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;选项：容器退出后自动删除&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;hello-world&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;镜像名（不含 &lt;code&gt;--&lt;/code&gt;，说明它是位置参数）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;口诀：&lt;code&gt;podman [全局选项] 子命令 [子命令选项] 镜像 [容器内执行的命令]&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="42-跑一个能交互的容器"&gt;4.2 跑一个能交互的容器&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman run -it --rm ubuntu:24.04 bash&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;-i&lt;/code&gt; = 保持标准输入打开&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;-t&lt;/code&gt; = 分配一个伪终端（pseudo-TTY）&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;--rm&lt;/code&gt; = 退出后清理&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;ubuntu:24.04&lt;/code&gt; = 镜像名 + 标签&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;bash&lt;/code&gt; = 容器启动后要执行的命令&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;进去之后，你会发现自己在一个全新的 Ubuntu 里。敲 &lt;code&gt;exit&lt;/code&gt; 退出，容器随即消失。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;💡 初学者最容易犯的错：&lt;strong&gt;不加 &lt;code&gt;-it&lt;/code&gt; 就想进交互式 shell&lt;/strong&gt;，结果容器瞬间退出，&lt;code&gt;podman ps&lt;/code&gt; 什么都看不到。记住：&lt;strong&gt;没有前台进程，容器就会退出。&lt;/strong&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="43-后台运行--端口映射"&gt;4.3 后台运行 + 端口映射&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman run -d --name web -p 8080:80 nginx:alpine&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;片段&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;含义&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;-d&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;后台运行（detached）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;--name web&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;给容器起名 &lt;code&gt;web&lt;/code&gt;，方便后续引用&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;-p 8080:80&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;宿主机 8080 端口&lt;/strong&gt; 映射到 &lt;strong&gt;容器 80 端口&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;然后验证：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman ps &lt;span style="color:#75715e"&gt;# 看到 web 正在运行&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl http://localhost:8080 &lt;span style="color:#75715e"&gt;# 应返回 nginx 欢迎页 HTML&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman logs web &lt;span style="color:#75715e"&gt;# 看日志&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman exec -it web sh &lt;span style="color:#75715e"&gt;# 进入这个正在运行的容器&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;⚠️ &lt;strong&gt;&lt;code&gt;-p&lt;/code&gt; 的冒号方向别记反&lt;/strong&gt;：&lt;code&gt;-p 宿主机端口:容器端口&lt;/code&gt;。&lt;code&gt;-p 8080:80&lt;/code&gt; 是&amp;quot;外面 8080，里面 80&amp;quot;。写反了会连不上。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="44-挂载数据卷"&gt;4.4 挂载数据卷&#10;&lt;/h3&gt;&lt;p&gt;容器一删，里面的数据就没了。要持久化，得挂卷：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 方式一：命名卷（Podman 管理存储位置）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman run -d --name db -v pgdata:/var/lib/postgresql/data &lt;span style="color:#ae81ff"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -e POSTGRES_PASSWORD&lt;span style="color:#f92672"&gt;=&lt;/span&gt;secret postgres:16-alpine&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 方式二：绑定挂载（挂宿主机目录，开发时常用）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman run -d --name web2 -v &lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;pwd&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;/html:/usr/share/nginx/html:ro -p 8081:80 nginx:alpine&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;-v pgdata:/path&lt;/code&gt; 中 &lt;code&gt;pgdata&lt;/code&gt; 不以 &lt;code&gt;/&lt;/code&gt; 开头 → 命名卷&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;-v $(pwd)/html:/path&lt;/code&gt; 中左边是绝对路径 → 绑定挂载&lt;/li&gt;&#10;&lt;li&gt;结尾 &lt;code&gt;:ro&lt;/code&gt; 表示只读挂载（容器改不了宿主机文件，更安全）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;💡 &lt;strong&gt;rootless 下的挂载权限坑&lt;/strong&gt;：绑定挂载宿主机目录时，容器里的用户 UID 与宿主机不一致，常出现&amp;quot;容器写不进去&amp;quot;的情况。这是 rootless 的正常现象，解法见第八节。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="45-清理容器跑多了怎么收场"&gt;4.5 清理：容器跑多了怎么收场&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman ps -a &lt;span style="color:#75715e"&gt;# 看全部容器（含已停止）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman stop web &lt;span style="color:#75715e"&gt;# 停&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman rm web &lt;span style="color:#75715e"&gt;# 删容器&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman rm -f web &lt;span style="color:#75715e"&gt;# 强制删（运行中也删）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman images &lt;span style="color:#75715e"&gt;# 看本地镜像&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman rmi nginx:alpine &lt;span style="color:#75715e"&gt;# 删镜像&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 一键清理（危险，但很省事）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman system prune -a &lt;span style="color:#75715e"&gt;# 删除所有未使用的容器、镜像、网络、卷&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman system prune -af --volumes &lt;span style="color:#75715e"&gt;# 连未使用的卷一起删（数据会丢！）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;⚠️ &lt;strong&gt;&lt;code&gt;podman system prune -a&lt;/code&gt; 会删掉所有没在跑的镜像&lt;/strong&gt;，下次用要重新拉。别在赶时间的时候手滑。带 &lt;code&gt;--volumes&lt;/code&gt; 更要小心，&lt;strong&gt;卷里可能是数据库数据&lt;/strong&gt;。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="五日常命令速查和-docker-逐条对照"&gt;五、日常命令速查：和 Docker 逐条对照&#10;&lt;/h2&gt;&lt;p&gt;这是本文最实用的一张表。&lt;strong&gt;Podman 对 Docker CLI 的兼容度非常高，绝大多数场景就是把 &lt;code&gt;docker&lt;/code&gt; 换成 &lt;code&gt;podman&lt;/code&gt;。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;用途&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Docker&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Podman&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;是否直接换名可用&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;查看版本&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;docker version&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman version&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;环境信息&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;docker info&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman info&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;拉镜像&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;docker pull nginx&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman pull nginx&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;看镜像&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;docker images&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman images&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;跑容器&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;docker run -d -p 80:80 nginx&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman run -d -p 80:80 nginx&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;看运行中容器&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;docker ps&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman ps&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;看全部容器&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;docker ps -a&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman ps -a&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;进容器&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;docker exec -it web sh&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman exec -it web sh&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;看日志&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;docker logs -f web&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman logs -f web&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;停 / 启 / 重启&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;docker stop/start/restart&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman stop/start/restart&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;删容器&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;docker rm -f web&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman rm -f web&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;删镜像&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;docker rmi nginx&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman rmi nginx&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;构建镜像&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;docker build -t x .&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman build -t x .&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;打标签&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;docker tag&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman tag&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;推/拉仓库&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;docker push/pull&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman push/pull&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;镜像导入导出&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;docker save/load&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman save/load&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;看卷&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;docker volume ls&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman volume ls&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;看网络&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;docker network ls&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman network ls&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;看详情&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;docker inspect&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman inspect&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;编排&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;docker compose up&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman compose up&lt;/code&gt;（依赖外部）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;⚠️ 见第七节&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Pod 概念&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;无（靠 K8s）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman pod create/ps&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;❌ 独有功能&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;systemd 集成&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;手工配置&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman generate systemd&lt;/code&gt; / Quadlet&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;❌ 独有功能&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;虚拟机管理&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Docker Desktop 内部&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman machine init/start/stop&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;❌ 独有功能&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="51-更省事的做法直接用-docker-命令"&gt;5.1 更省事的做法：直接用 &lt;code&gt;docker&lt;/code&gt; 命令&#10;&lt;/h3&gt;&lt;p&gt;Podman 提供了一个兼容包 &lt;strong&gt;&lt;code&gt;podman-docker&lt;/code&gt;&lt;/strong&gt;，装好后会创建一个指向 podman 的 &lt;code&gt;docker&lt;/code&gt; 别名：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Fedora / RHEL&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo dnf install -y podman-docker&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Ubuntu / Debian&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install -y podman-docker&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;装上之后，你现有的 &lt;code&gt;docker ...&lt;/code&gt; 脚本&lt;strong&gt;不用改一个字符&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker run -d --name web -p 8080:80 nginx &lt;span style="color:#75715e"&gt;# 实际由 podman 执行&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;⚠️ &lt;strong&gt;重要澄清&lt;/strong&gt;：&lt;code&gt;podman-docker&lt;/code&gt; &lt;strong&gt;只是符号链接/包装脚本，它不会启动 Docker 守护进程&lt;/strong&gt;。有人以为装了它就&amp;quot;有了 Docker&amp;quot;，是误解。另外，&lt;strong&gt;如果你同时装了 Docker Desktop，注意两者对 &lt;code&gt;/usr/bin/docker&lt;/code&gt; 的争夺&lt;/strong&gt;——先装的赢。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="52-高频组合命令备忘"&gt;5.2 高频组合命令备忘&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 停止并删除所有容器&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman stop &lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;podman ps -q&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; podman rm &lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;podman ps -aq&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 删除所有 &amp;lt;none&amp;gt; 悬空镜像&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman image prune -f&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 看容器资源占用（类似 top）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman stats&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 看容器端口映射&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman port web&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 复制文件进出容器&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman cp ./config.yml web:/etc/app/config.yml&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman cp web:/var/log/app.log ./&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 导出容器为新镜像（把改动固化下来）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman commit web my-web:v1&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;给新手的建议&lt;/strong&gt;：先把 &lt;code&gt;run / ps / logs / exec / stop / rm / images / rmi&lt;/code&gt; 这 8 个命令练熟，日常 90% 的操作就够了。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="六镜像构建推送与导入导出"&gt;六、镜像：构建、推送与导入导出&#10;&lt;/h2&gt;&lt;h3 id="61-写第一个-containerfile"&gt;6.1 写第一个 Containerfile&#10;&lt;/h3&gt;&lt;p&gt;Podman 用 &lt;strong&gt;Containerfile&lt;/strong&gt;（和 Dockerfile 完全同格式，只是名字更中性）：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-dockerfile" data-lang="dockerfile"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Containerfile&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;FROM&lt;/span&gt; &lt;span style="color:#e6db74"&gt;docker.io/library/python:3.13-slim&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;WORKDIR&lt;/span&gt; &lt;span style="color:#e6db74"&gt;/app&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 先拷依赖清单，利用层缓存&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;COPY&lt;/span&gt; requirements.txt .&lt;span style="color:#960050;background-color:#1e0010"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;RUN&lt;/span&gt; pip install --no-cache-dir -r requirements.txt&lt;span style="color:#960050;background-color:#1e0010"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 再拷代码&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;COPY&lt;/span&gt; . .&lt;span style="color:#960050;background-color:#1e0010"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;EXPOSE&lt;/span&gt; &lt;span style="color:#e6db74"&gt;8000&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;CMD&lt;/span&gt; [&lt;span style="color:#e6db74"&gt;&amp;#34;python&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;-m&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;http.server&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;8000&amp;#34;&lt;/span&gt;]&lt;span style="color:#960050;background-color:#1e0010"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;构建：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman build -t myapp:v1 .&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;💡 &lt;strong&gt;几点新手要点&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;.containerignore&lt;/code&gt;&lt;/strong&gt; 与 &lt;code&gt;.dockerignore&lt;/code&gt; 作用一致，用来排除不需要进镜像的文件（如 &lt;code&gt;.git&lt;/code&gt;、&lt;code&gt;node_modules&lt;/code&gt;），能显著减小体积、加快构建&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;层缓存&lt;/strong&gt;：把变化少的指令（装依赖）放前面，变化多的（拷代码）放后面&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;镜像名规范&lt;/strong&gt;：&lt;code&gt;podman build&lt;/code&gt; 时不写仓库前缀，默认是本地镜像；要推送必须带注册表前缀&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="62-完整镜像名长什么样"&gt;6.2 完整镜像名长什么样&#10;&lt;/h3&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart LR&#10; A["docker.io"] --&gt; B["/library/"]&#10; B --&gt; C["nginx"]&#10; C --&gt; D[":alpine"]&#10;&#10; style A fill:#3b82f6,stroke:#1e40af,color:#fff&#10; style B fill:#8b5cf6,stroke:#6d28d9,color:#fff&#10; style C fill:#14b8a6,stroke:#0f766e,color:#fff&#10; style D fill:#f59e0b,stroke:#b45309,color:#fff&lt;/pre&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;片段&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;名称&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;说明&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;docker.io&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;注册表（registry）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;不写默认 Docker Hub&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;/library&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;命名空间&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;官方镜像在 &lt;code&gt;library&lt;/code&gt; 下，不写默认&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;nginx&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;仓库名（repository）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;镜像名&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;:alpine&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;标签（tag）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;不写默认 &lt;code&gt;latest&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;strong&gt;所以 &lt;code&gt;nginx:alpine&lt;/code&gt; 的完整形式是 &lt;code&gt;docker.io/library/nginx:alpine&lt;/code&gt;。&lt;/strong&gt; 理解这一点，后面配私有仓库就不会懵。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;⚠️ &lt;strong&gt;生产环境别用 &lt;code&gt;latest&lt;/code&gt;&lt;/strong&gt;：它会随上游更新而变化，今天跑通的版本明天可能挂。&lt;strong&gt;永远锁具体标签&lt;/strong&gt;（如 &lt;code&gt;nginx:1.27-alpine&lt;/code&gt;），或者直接用 digest（&lt;code&gt;nginx@sha256:...&lt;/code&gt;）。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="63-推送到-docker-hub-或私有仓库"&gt;6.3 推送到 Docker Hub 或私有仓库&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 登录&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman login docker.io&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 或私有仓库&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman login registry.example.com -u myuser&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 打标签（必须带注册表前缀）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman tag myapp:v1 docker.io/myusername/myapp:v1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 推送&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman push docker.io/myusername/myapp:v1&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;💡 &lt;strong&gt;登录凭据存在哪&lt;/strong&gt;：默认在 &lt;code&gt;${XDG_RUNTIME_DIR}/containers/auth.json&lt;/code&gt;，比 Docker 的明文 &lt;code&gt;~/.docker/config.json&lt;/code&gt; 更安全。可以配 &lt;code&gt;podman login --get-login&lt;/code&gt; 查看当前登录用户。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="64-镜像搬运三件套podman-的独门优势"&gt;6.4 镜像搬运三件套（Podman 的独门优势）&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;场景&lt;/strong&gt;：把镜像从 A 仓库同步到 B 仓库，中间不想落地、不想跑容器。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 用 skopeo：直接从源仓库复制到目标仓库&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;skopeo copy docker://docker.io/library/nginx:alpine &lt;span style="color:#ae81ff"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; docker://registry.example.com/mirror/nginx:alpine&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 只看远程镜像信息，不下载镜像本体&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;skopeo inspect docker://docker.io/library/nginx:alpine&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 列出远程仓库所有标签&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;skopeo list-tags docker://docker.io/library/nginx&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;场景&lt;/strong&gt;：离线环境传输。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 有网机器：导出成 tar&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman save -o nginx.tar docker.io/library/nginx:alpine&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 离线机器：导入&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman load -i nginx.tar&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 也可以用 skopeo 直接导出为归档&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;skopeo copy docker://docker.io/library/nginx:alpine &lt;span style="color:#ae81ff"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; docker-archive:nginx.tar:nginx:alpine&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这就是 &lt;code&gt;buildah&lt;/code&gt; + &lt;code&gt;skopeo&lt;/code&gt; 的价值：&lt;strong&gt;它们把&amp;quot;构建&amp;quot;和&amp;quot;搬运&amp;quot;从&amp;quot;运行&amp;quot;里拆了出来&lt;/strong&gt;，做 CI 时特别顺手。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="七进阶重点podcompose-与-systemd"&gt;七、进阶重点：Pod、compose 与 systemd&#10;&lt;/h2&gt;&lt;p&gt;这一节是 Podman 真正区别于 Docker 的地方。&lt;strong&gt;如果只学一个进阶功能，我建议学 Pod。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h3 id="71-podpodman-的特色功能"&gt;7.1 Pod：Podman 的特色功能&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Pod 是一组共享网络与命名空间的容器集合。&lt;/strong&gt; 这个概念来自 Kubernetes——同一个 Pod 里的容器像&amp;quot;住在同一间房&amp;quot;：共享 IP、共享端口空间、可以用 &lt;code&gt;localhost&lt;/code&gt; 互相访问。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 1. 创建一个 Pod，把 8080 端口暴露在 Pod 层面&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman pod create --name mypod -p 8080:80&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 2. 往 Pod 里塞两个容器（注意：端口已由 pod 占用，容器内不再写 -p）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman run -d --pod mypod --name web nginx:alpine&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman run -d --pod mypod --name logger alpine sh -c &lt;span style="color:#e6db74"&gt;&amp;#39;while true; do echo hi; sleep 5; done&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 3. 看 Pod 及其内部的容器&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman pod ps&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman ps --pod&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 4. 在 Pod 内一个容器里访问另一个&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman exec web curl -s http://localhost:80 | head -3&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart TB&#10; subgraph P["Pod: mypod（共享网络命名空间）"]&#10; direction LR&#10; W["容器 web&lt;br/&gt;nginx:alpine&lt;br/&gt;监听 :80"]&#10; L["容器 logger&lt;br/&gt;alpine&lt;br/&gt;输出日志"]&#10; end&#10; P --&gt; NS["共享 IP / 共享 localhost / 共享端口空间"]&#10; NS --&gt; H["宿主机 :8080 → Pod :80"]&#10;&#10; style P fill:#3b82f6,stroke:#1e40af,color:#fff&#10; style W fill:#10b981,stroke:#047857,color:#fff&#10; style L fill:#f59e0b,stroke:#b45309,color:#fff&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;为什么有用&lt;/strong&gt;：这正是 Kubernetes 里 Pod 的模型。&lt;strong&gt;你在本地用 &lt;code&gt;podman pod&lt;/code&gt; 练会了，上 K8s 时概念是通的&lt;/strong&gt;。而且 &lt;code&gt;podman generate kube&lt;/code&gt; 能直接把 Pod 导出成 K8s YAML：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman generate kube mypod &amp;gt; mypod.yaml &lt;span style="color:#75715e"&gt;# 导出为 Kubernetes 清单&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman play kube mypod.yaml &lt;span style="color:#75715e"&gt;# 从 K8s 清单直接拉起&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;这是 Podman 最漂亮的用法之一&lt;/strong&gt;：本地开发 → 一键生成 K8s 清单 → 直接上集群。&lt;/p&gt;&#10;&lt;h3 id="72-compose怎么用-docker-composeyml"&gt;7.2 compose：怎么用 docker-compose.yml&#10;&lt;/h3&gt;&lt;p&gt;Podman 本身不内置 compose，但有两条路：&lt;/p&gt;&#10;&lt;h4 id="方式一podman-compose轻量独立实现"&gt;方式一：&lt;code&gt;podman-compose&lt;/code&gt;（轻量，独立实现）&#10;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pip install podman-compose&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 或&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install -y podman-compose&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman-compose up -d&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman-compose down&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman-compose ps&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;它读取同样的 &lt;code&gt;docker-compose.yml&lt;/code&gt; / &lt;code&gt;compose.yaml&lt;/code&gt;，把每个 service 翻译成 &lt;code&gt;podman run&lt;/code&gt;。&lt;/p&gt;&#10;&lt;h4 id="方式二podman-compose推荐作为-docker-compose-的前端"&gt;方式二：&lt;code&gt;podman compose&lt;/code&gt;（推荐，作为 docker-compose 的前端）&#10;&lt;/h4&gt;&lt;p&gt;新版本 Podman 提供了 &lt;code&gt;podman compose&lt;/code&gt; 子命令，它会&lt;strong&gt;调用系统上已安装的 compose provider&lt;/strong&gt;（&lt;code&gt;docker-compose&lt;/code&gt; 或 &lt;code&gt;podman-compose&lt;/code&gt;），兼容性更好：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman compose up -d&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman compose down&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Podman Desktop 里还支持一键把 compose 项目转成 Pod&lt;/strong&gt;，图形化点几下就行。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;⚠️ &lt;strong&gt;兼容性提醒&lt;/strong&gt;：&lt;code&gt;podman-compose&lt;/code&gt; 对复杂 compose 特性（&lt;code&gt;depends_on&lt;/code&gt; 的健康检查条件、某些 &lt;code&gt;deploy&lt;/code&gt; 段、profiles）支持不如 Docker Compose 完整。&lt;strong&gt;如果你的 compose 文件很复杂，建议直接用 &lt;code&gt;podman compose&lt;/code&gt; 走 docker-compose provider，或干脆评估是否留用 Docker&lt;/strong&gt;。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="73-systemd-集成让容器开机自启"&gt;7.3 systemd 集成：让容器开机自启&#10;&lt;/h3&gt;&lt;p&gt;这是 Podman 比 Docker 更优雅的地方——&lt;strong&gt;把容器变成真正的 systemd 服务&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h4 id="方式一quadletpodman-44-起推荐podman-5-是主流做法"&gt;方式一：Quadlet（Podman 4.4+ 起推荐，Podman 5+ 是主流做法）&#10;&lt;/h4&gt;&lt;p&gt;在 &lt;code&gt;~/.config/containers/systemd/web.container&lt;/code&gt; 写声明式配置：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;[Unit]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;Description&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;Nginx Web Container&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;[Container]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;Image&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;docker.io/library/nginx:alpine&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;PublishPort&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;8080:80&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;Volume&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;%h/html:/usr/share/nginx/html:ro&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;[Service]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;Restart&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;always&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;[Install]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;WantedBy&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;default.target&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl --user daemon-reload&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl --user start web.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl --user enable web.service &lt;span style="color:#75715e"&gt;# 开机自启&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl --user status web.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;💡 &lt;strong&gt;命名规则很关键&lt;/strong&gt;：&lt;code&gt;.container&lt;/code&gt; 文件生成的服务名 = 文件名 + &lt;code&gt;.service&lt;/code&gt;（&lt;code&gt;web.container&lt;/code&gt; → &lt;code&gt;web.service&lt;/code&gt;），&lt;strong&gt;不要自己去 &lt;code&gt;enable&lt;/code&gt; 一个不存在的同名服务&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;💡 还想让用户退出登录后容器继续跑（服务器场景）：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo loginctl enable-linger $USER&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/blockquote&gt;&#10;&lt;h4 id="方式二podman-generate-systemd旧版方式仍可用"&gt;方式二：&lt;code&gt;podman generate systemd&lt;/code&gt;（旧版方式，仍可用）&#10;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman generate systemd --new --name web --files&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 会把 web.service 生成到当前目录，拷到 ~/.config/systemd/user/ 后 daemon-reload 即可&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;⚠️ &lt;code&gt;podman generate systemd&lt;/code&gt; 在新版本中已被标记为 deprecated，&lt;strong&gt;新项目请优先用 Quadlet&lt;/strong&gt;。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h4 id="方式三linux-系统级服务root-运行"&gt;方式三：Linux 系统级服务（root 运行）&#10;&lt;/h4&gt;&lt;p&gt;如果确实需要 root 容器（如监听 80 端口），可以 &lt;code&gt;sudo podman ...&lt;/code&gt; + 放 &lt;code&gt;/etc/systemd/system/&lt;/code&gt;。但&lt;strong&gt;优先考虑 rootless + 端口转发&lt;/strong&gt;，安全性更好。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="八rootless-权限模型新手最容易卡的地方"&gt;八、rootless 权限模型：新手最容易卡的地方&#10;&lt;/h2&gt;&lt;p&gt;这一节专门给被&amp;quot;权限不够&amp;quot;卡住的人。&lt;/p&gt;&#10;&lt;h3 id="81-rootless-是怎么做到的"&gt;8.1 rootless 是怎么做到的&#10;&lt;/h3&gt;&lt;p&gt;Linux 内核从 3.8 起提供 &lt;strong&gt;user namespace（用户命名空间）&lt;/strong&gt;。Podman 利用它做了一层 &lt;strong&gt;UID 映射&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart LR&#10; subgraph H["宿主机命名空间"]&#10; H1["你的普通用户&lt;br/&gt;UID 1000"]&#10; subgraph R["映射区间"]&#10; H2["从属 UID 范围&lt;br/&gt;e.g. 100000–165535"]&#10; end&#10; end&#10; subgraph C["容器内命名空间"]&#10; C1["root&lt;br/&gt;UID 0"]&#10; C2["普通用户&lt;br/&gt;UID 1…65535"]&#10; end&#10; C1 -.-&gt;|"映射到"| H1&#10; C2 -.-&gt;|"映射到"| H2&#10;&#10; style H1 fill:#10b981,stroke:#047857,color:#fff&#10; style C1 fill:#3b82f6,stroke:#1e40af,color:#fff&#10; style H2 fill:#94a3b8,stroke:#475569,color:#fff&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;你在容器里是 &lt;code&gt;root&lt;/code&gt;（UID 0），但在宿主机上实际只是你的普通用户（UID 1000）。&lt;/strong&gt; 就算容器里把 root 玩坏了，攻击者拿到的也只是你这份普通权限，&lt;strong&gt;碰不到系统。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;这个映射区间记录在 &lt;code&gt;/etc/subuid&lt;/code&gt; 和 &lt;code&gt;/etc/subgid&lt;/code&gt; 里：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;grep $USER /etc/subuid /etc/subgid&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 应输出类似：youruser:100000:65536&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;如果这里是空的，rootless 会出问题。&lt;/strong&gt; 修复：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $USER&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman system migrate &lt;span style="color:#75715e"&gt;# 重建存储&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="82-三个高频权限坑"&gt;8.2 三个高频权限坑&#10;&lt;/h3&gt;&lt;h4 id="坑-1绑定挂载后容器写不进去"&gt;坑 1：绑定挂载后容器写不进去&#10;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;现象&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman run -v &lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;pwd&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;/data:/data alpine touch /data/test.txt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# touch: /data/test.txt: Permission denied&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;原因&lt;/strong&gt;：宿主机目录属于 UID 1000，但容器里你是 UID 0，映射后实际身份对不上宿主机文件属主。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;三种解法&lt;/strong&gt;（按推荐度排）：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 解法一（推荐）：让容器以宿主机 UID 运行&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman run --userns&lt;span style="color:#f92672"&gt;=&lt;/span&gt;keep-id -v &lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;pwd&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;/data:/data alpine touch /data/test.txt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 解法二：指定容器内用户与你的 UID 一致&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman run --user &lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;id -u&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;:&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;id -g&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt; -v &lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;pwd&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;/data:/data alpine touch /data/test.txt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 解法三：只读挂载（不需要写就用这个）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman run -v &lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;pwd&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;/data:/data:ro alpine ls /data&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;💡 &lt;code&gt;--userns=keep-id&lt;/code&gt; 是 &lt;strong&gt;rootless 场景下的万能解&lt;/strong&gt;：它让容器里的 UID 直接等于你在宿主机的 UID，文件权限就对上了。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h4 id="坑-2想监听-1024-以下端口如-80443"&gt;坑 2：想监听 1024 以下端口（如 80、443）&#10;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;rootless 默认不允许绑定特权端口。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 方案一：宿主端口用高位（最常用）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman run -d -p 8080:80 nginx:alpine &lt;span style="color:#75715e"&gt;# 宿主 8080 转发到容器 80&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 方案二：放行低位端口（一次性配置）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sysctl -w net.ipv4.ip_unprivileged_port_start&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;80&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 永久生效：写入 /etc/sysctl.d/&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 方案三：用 systemd socket 激活或反向代理（生产更推荐）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="坑-3podman-desktop-连不上-podman"&gt;坑 3：Podman Desktop 连不上 Podman&#10;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;在 Windows 上，Podman Desktop 通过 socket 与 Podman 通信，依赖 dbus；dbus 不可用时会连接失败。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;排查顺序：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 1. 确认 machine 在跑&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman machine list&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 2. 看 socket 是否存在&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman info --format &lt;span style="color:#e6db74"&gt;&amp;#39;{{.Host.RemoteSocket.Path}}&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 3. 重启 machine 与 Desktop&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman machine stop &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; podman machine start&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果仍然连不上，&lt;strong&gt;优先检查是不是走 WSL2 路线&lt;/strong&gt;——WSL2 里的 Podman 与外层 Desktop 的对接最容易出问题。&lt;strong&gt;最简单的绕法是：直接在 WSL2 里用命令行 Podman，不依赖 Desktop 的 GUI。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="九常见问题与排错清单"&gt;九、常见问题与排错清单&#10;&lt;/h2&gt;&lt;p&gt;下面这张表是新手最可能撞上的问题，建议自查时直接对照。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;现象&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;可能原因&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;解法&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman ps&lt;/code&gt; 什么都没有&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;容器无前台进程已退出&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman ps -a&lt;/code&gt; 看状态；交互式要加 &lt;code&gt;-it&lt;/code&gt;，长驻进程要加 &lt;code&gt;-d&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;Cannot connect to Podman socket&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;machine 未启动 / socket 路径错&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman machine start&lt;/code&gt;；&lt;code&gt;podman info&lt;/code&gt; 核对 socket&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;Error: image not known&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;镜像名或标签拼错 / 未 pull&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;先 &lt;code&gt;podman pull&lt;/code&gt;，或用完整名 &lt;code&gt;docker.io/library/nginx:alpine&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;Permission denied&lt;/code&gt; 挂载目录&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;rootless UID 不匹配&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;加 &lt;code&gt;--userns=keep-id&lt;/code&gt; 或 &lt;code&gt;--user $(id -u):$(id -g)&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;端口映射不生效&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;-p&lt;/code&gt; 写反 / 防火墙 / 容器内未监听&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;确认 &lt;code&gt;-p 宿主:容器&lt;/code&gt;；&lt;code&gt;podman port &amp;lt;容器&amp;gt;&lt;/code&gt; 核对&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;拉镜像超时 / TLS 错误&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;网络 / 代理 / 证书吊销检查&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;配 &lt;code&gt;~/.config/containers/registries.conf&lt;/code&gt; 镜像加速；必要时设 &lt;code&gt;SSL_CERT_FILE&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;磁盘被撑满&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;悬空镜像 + 停止的容器堆积&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman system df&lt;/code&gt; 看占用；&lt;code&gt;podman system prune -a&lt;/code&gt; 清理&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;subuid/subgid&lt;/code&gt; 相关报错&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;/etc/subuid&lt;/code&gt; 未配置&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;usermod --add-subuids/--add-subgids&lt;/code&gt; + &lt;code&gt;podman system migrate&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;compose 启动失败&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;podman-compose&lt;/code&gt; 兼容性不足&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;改用 &lt;code&gt;podman compose&lt;/code&gt;（走 docker-compose provider）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;容器时间/时区不对&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;未挂载时区&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;-v /etc/localtime:/etc/localtime:ro -e TZ=Asia/Shanghai&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;中文乱码&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;容器内缺 locale&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;-e LANG=C.UTF-8&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="91-三个必备诊断命令"&gt;9.1 三个必备诊断命令&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 1. 看环境全貌（runtime、rootless、存储驱动、socket）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman info&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 2. 看某容器为什么起不来（重点看 State 与 LogPath）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman inspect mycontainer | head -50&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman logs mycontainer&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 3. 看磁盘占用明细&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman system df&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="92-调试容器的正确姿势"&gt;9.2 调试容器的正确姿势&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 不进容器、只覆盖入口命令，看看环境长什么样&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman run --rm -it --entrypoint sh nginx:alpine&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 注意：基础镜像如果没有 sh（如 scratch），这条会失败&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 保留退出后的容器，方便事后 inspect&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman run --name debug1 nginx:alpine &lt;span style="color:#75715e"&gt;# 不加 --rm&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 看容器退出码与原因&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman inspect debug1 --format &lt;span style="color:#e6db74"&gt;&amp;#39;{{.State.ExitCode}} / {{.State.Error}}&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 实时资源占用&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman stats --no-stream&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;💡 &lt;strong&gt;一条通用排错思路&lt;/strong&gt;：&lt;strong&gt;先把 &lt;code&gt;-d&lt;/code&gt; 去掉、把 &lt;code&gt;--rm&lt;/code&gt; 去掉、把入口换成 &lt;code&gt;sh&lt;/code&gt;&lt;/strong&gt;，让容器&amp;quot;停在那里&amp;quot;让你看。这比盯着报错猜快得多。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="十从-docker-迁移一份可直接执行的清单"&gt;十、从 Docker 迁移：一份可直接执行的清单&#10;&lt;/h2&gt;&lt;p&gt;如果你决定从 Docker 转 Podman，&lt;strong&gt;不用一次全换&lt;/strong&gt;，按这个顺序走最稳。&lt;/p&gt;&#10;&lt;h3 id="101-迁移前的心理准备"&gt;10.1 迁移前的心理准备&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;项目&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;迁移难度&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;说明&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;日常 &lt;code&gt;docker run/ps/logs/exec&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;⭐ 极低&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;换名即用&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Dockerfile / Containerfile&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;⭐ 极低&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;同格式&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;docker-compose.yml&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;⭐⭐⭐ 中&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;简单文件没问题，复杂编排要测&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;数据卷与镜像&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;⭐⭐ 低&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;可 &lt;code&gt;save/load&lt;/code&gt; 或重新拉取&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;CI/CD 脚本&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;⭐⭐ 低&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;换命令名即可，或装 &lt;code&gt;podman-docker&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Kubernetes 本地开发&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;⭐⭐⭐⭐ 较高&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;依赖 kind/minikube 的链路要单独评估&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="102-五步迁移法"&gt;10.2 五步迁移法&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;第 1 步：共存，不拆 Docker&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;先把 Podman 装上，让两者并存。&lt;/strong&gt; 不要一上来就卸 Docker，否则出问题没法回退。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Linux 上装 Podman（前面第三节的命令）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install -y podman&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman run --rm hello-world &lt;span style="color:#75715e"&gt;# 确认独立可用&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;第 2 步：把现有镜像与卷搬过来&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 导出 Docker 镜像列表并逐个搬运&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker images --format &lt;span style="color:#e6db74"&gt;&amp;#39;{{.Repository}}:{{.Tag}}&amp;#39;&lt;/span&gt; | grep -v &lt;span style="color:#e6db74"&gt;&amp;#39;&amp;lt;none&amp;gt;&amp;#39;&lt;/span&gt; &amp;gt; images.txt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; read img; &lt;span style="color:#66d9ef"&gt;do&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; podman pull &lt;span style="color:#e6db74"&gt;&amp;#34;docker.io/&lt;/span&gt;$img&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;||&lt;/span&gt; echo &lt;span style="color:#e6db74"&gt;&amp;#34;FAILED: &lt;/span&gt;$img&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;done&lt;/span&gt; &amp;lt; images.txt&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;卷的数据建议&lt;strong&gt;用应用层方式迁移&lt;/strong&gt;（如 &lt;code&gt;pg_dump&lt;/code&gt;）而不是直接拷目录，更可靠。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;第 3 步：批量验证日常命令&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;把常用脚本里的 &lt;code&gt;docker&lt;/code&gt; 换成 &lt;code&gt;podman&lt;/code&gt;，跑一遍。新版本 Podman 提供了&lt;strong&gt;自动检测命令&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman-compose --help &lt;span style="color:#75715e"&gt;# 若用 compose&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman system check &lt;span style="color:#75715e"&gt;# 检查存储健康&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;第 4 步：决定 compose 路线&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 试跑现有 compose 文件&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman compose up -d&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman compose ps&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 若报错，逐项比对不支持的特性&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;第 5 步：迁移 systemd 服务与清理&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 把需要开机自启的容器改成 Quadlet&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir -p ~/.config/containers/systemd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 写 web.container（见 7.3）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl --user daemon-reload&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl --user enable --now web.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo loginctl enable-linger $USER&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 确认新服务稳定运行一周后，再考虑卸载 Docker Desktop&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="103-兼容层让-docker-命令指向-podman"&gt;10.3 兼容层：让 &lt;code&gt;docker&lt;/code&gt; 命令指向 Podman&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Linux&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install -y podman-docker &lt;span style="color:#75715e"&gt;# 或 dnf install podman-docker&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker --version &lt;span style="color:#75715e"&gt;# 会显示 podman 的版本&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;⚠️ &lt;strong&gt;注意&lt;/strong&gt;：装 &lt;code&gt;podman-docker&lt;/code&gt; 前&lt;strong&gt;先卸掉 Docker 的 docker CLI&lt;/strong&gt;，否则会造成命令冲突（谁后装谁被覆盖，或直接报错）。&lt;strong&gt;这一步放在迁移的最后，且确认不再需要 Docker 之后再做。&lt;/strong&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="104-别名兜底最温和的过渡"&gt;10.4 别名兜底：最温和的过渡&#10;&lt;/h3&gt;&lt;p&gt;不想动系统配置，可以在 &lt;code&gt;~/.bashrc&lt;/code&gt; / &lt;code&gt;~/.zshrc&lt;/code&gt; 里加别名：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;alias docker&lt;span style="color:#f92672"&gt;=&lt;/span&gt;podman&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;alias docker-compose&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;podman compose&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;这样你的所有习惯都能保留，行为却已经是 Podman。&lt;/strong&gt; 成本最低，随时 &lt;code&gt;unalias&lt;/code&gt; 回退。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="十一该不该换适用与不适用场景"&gt;十一、该不该换：适用与不适用场景&#10;&lt;/h2&gt;&lt;p&gt;最后给一个决策参考，避免为了换而换。&lt;/p&gt;&#10;&lt;h3 id="111-强烈推荐用-podman-的场景"&gt;11.1 强烈推荐用 Podman 的场景&#10;&lt;/h3&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart TD&#10; S["你在用容器？"] --&gt; A{"需要 rootless / 更高安全？"}&#10; A --&gt;|是| P1["✅ 用 Podman"]&#10; A --&gt;|否| B{"在意商业授权成本？"}&#10; B --&gt;|是| P2["✅ 用 Podman"]&#10; B --&gt;|否| C{"要做本地 K8s 开发？"}&#10; C --&gt;|是| P3["✅ 用 Podman&lt;br/&gt;（pod → K8s YAML）"]&#10; C --&gt;|否| D{"重度依赖复杂 Compose？"}&#10; D --&gt;|是| D1["⚠️ 先评估兼容性&lt;br/&gt;或留用 Docker"]&#10; D --&gt;|否| P4["✅ 用 Podman"]&#10;&#10; style P1 fill:#10b981,stroke:#047857,color:#fff&#10; style P2 fill:#10b981,stroke:#047857,color:#fff&#10; style P3 fill:#10b981,stroke:#047857,color:#fff&#10; style P4 fill:#10b981,stroke:#047857,color:#fff&#10; style D1 fill:#f59e0b,stroke:#b45309,color:#fff&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;具体来说，这些场景特别合适&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;安全敏感的环境&lt;/strong&gt;：CI/CD 流水线、多租户开发机、给实习生开放的环境&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;企业授权受限&lt;/strong&gt;：不想为 Docker Desktop 商业授权付费&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;个人开发与学习&lt;/strong&gt;：完全免费，且能顺便理解 K8s 的 Pod 模型&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;服务器上的常驻服务&lt;/strong&gt;：systemd 集成比 Docker 更原生&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;本地 K8s 开发&lt;/strong&gt;：&lt;code&gt;podman generate kube&lt;/code&gt; 这条捷径非常省事&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;高性能计算 / 共享集群&lt;/strong&gt;：rootless 无需管理员权限&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="112-建议暂时留用-docker-的场景"&gt;11.2 建议暂时留用 Docker 的场景&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;重度依赖 Docker Compose 全部特性&lt;/strong&gt;（复杂 &lt;code&gt;depends_on&lt;/code&gt; 健康检查、profiles、&lt;code&gt;deploy&lt;/code&gt; 段）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;本地 K8s 工具链深度绑定 Docker&lt;/strong&gt;（kind、minikube、部分 IDE 插件）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;团队协作规范已围绕 Docker 建立&lt;/strong&gt;，迁移沟通成本高于收益&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;依赖 Docker Desktop 独有功能&lt;/strong&gt;（如某些扩展、内置 K8s 一键集群）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="113-一个务实的结论"&gt;11.3 一个务实的结论&#10;&lt;/h3&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;不用二选一。&lt;/strong&gt; Podman 和 Docker 可以在同一台机器上共存——&lt;strong&gt;新项目用 Podman，老项目继续用 Docker，慢慢迁&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;对新手来说，最佳路径是：&lt;strong&gt;先装 Podman（或已在用的 WSL2 里装一个），用 &lt;code&gt;hello-world&lt;/code&gt;、&lt;code&gt;nginx&lt;/code&gt;、&lt;code&gt;postgres&lt;/code&gt; 三个镜像把 &lt;code&gt;run / ps / logs / exec / stop / rm&lt;/code&gt; 练熟&lt;/strong&gt;。当你发现&amp;quot;我敲的命令和 Docker 一模一样，但少了一个常驻进程、还不用 root&amp;quot;的时候，这次迁移就已经值了。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="附速查卡"&gt;附：速查卡&#10;&lt;/h2&gt;&lt;p&gt;把下面这段存成 &lt;code&gt;~/.bashrc&lt;/code&gt; 的备忘，或抄在便签上：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# ===== Podman 新手速查 =====&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman run --rm hello-world &lt;span style="color:#75715e"&gt;# 冒烟测试&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman run -it --rm ubuntu:24.04 bash &lt;span style="color:#75715e"&gt;# 交互式&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman run -d --name web -p 8080:80 nginx:alpine &lt;span style="color:#75715e"&gt;# 后台 + 端口&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman run -d --name db -v pgdata:/var/lib/postgresql/data -e POSTGRES_PASSWORD&lt;span style="color:#f92672"&gt;=&lt;/span&gt;x postgres:16&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman run --userns&lt;span style="color:#f92672"&gt;=&lt;/span&gt;keep-id -v &lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;pwd&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;/data:/data alpine &lt;span style="color:#75715e"&gt;# 解决挂载权限&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman ps -a &lt;span style="color:#75715e"&gt;# 全部容器&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman logs -f web &lt;span style="color:#75715e"&gt;# 跟踪日志&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman exec -it web sh &lt;span style="color:#75715e"&gt;# 进容器&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman stats &lt;span style="color:#75715e"&gt;# 资源占用&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman port web &lt;span style="color:#75715e"&gt;# 端口映射&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman stop web &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; podman rm web &lt;span style="color:#75715e"&gt;# 停 + 删&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman images &lt;span style="color:#75715e"&gt;# 镜像列表&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman rmi nginx:alpine &lt;span style="color:#75715e"&gt;# 删镜像&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman system df &lt;span style="color:#75715e"&gt;# 磁盘占用&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman system prune -a &lt;span style="color:#75715e"&gt;# 大扫除（谨慎）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman pod create --name mypod -p 8080:80 &lt;span style="color:#75715e"&gt;# 创建 Pod&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman generate kube mypod &amp;gt; mypod.yaml &lt;span style="color:#75715e"&gt;# 导出 K8s 清单&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman machine list / start / stop &lt;span style="color:#75715e"&gt;# Windows/macOS 虚拟机&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman info &lt;span style="color:#75715e"&gt;# 环境诊断&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="官方资源"&gt;官方资源&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;资源&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;地址&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;项目官网&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://podman.io" target="_blank" rel="noopener"&#10; &gt;https://podman.io&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;GitHub 仓库&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://github.com/containers/podman" target="_blank" rel="noopener"&#10; &gt;https://github.com/containers/podman&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;官方文档&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://docs.podman.io" target="_blank" rel="noopener"&#10; &gt;https://docs.podman.io&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Podman Desktop&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://podman-desktop.io" target="_blank" rel="noopener"&#10; &gt;https://podman-desktop.io&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;镜像仓库&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://hub.docker.com" target="_blank" rel="noopener"&#10; &gt;https://hub.docker.com&lt;/a&gt;（Podman 兼容 Docker Hub）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;版本提示&lt;/strong&gt;：本文示例基于 Podman v5/v6 语法。&lt;code&gt;podman generate systemd&lt;/code&gt; 已在 v5 起标记为 deprecated，新项目请用 Quadlet；&lt;code&gt;podman compose&lt;/code&gt; 需要系统上装有 &lt;code&gt;docker-compose&lt;/code&gt; 或 &lt;code&gt;podman-compose&lt;/code&gt; 作为 provider。不同发行版打包版本差异较大（Ubuntu 官方源常落后），涉及 Desktop 联调时请优先安装较新版本。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;</description></item></channel></rss>