跳到主内容

Podman Quadlet 教程:用 systemd 管理 rootless 容器

使用 .container 与 .volume 声明文件管理 Podman 容器,覆盖 rootless 路径、开机启动、卷、端口、日志和生成器排错。

GSProber · 主机测评编辑0 阅读
使用 .container 与 .volume 声明文件管理 Podman 容器,覆盖 rootless 路径、开机启…

Podman Quadlet 教程:把容器交给 systemd

这篇 Podman Quadlet 教程介绍如何用声明文件生成 systemd 服务。Quadlet 支持 container、volume、network、pod 等单元类型,管理员维护简洁文件,Podman 生成器在 systemd 加载时转换为服务。下面采用 rootless 模式,降低容器获得主机高权限的风险。

确认环境与文件路径

官方参考指出 Quadlet 依赖 cgroup v2,可先用 podman info 检查。rootless 文件通常放在 ~/.config/containers/systemd/,rootful 文件放在 /etc/containers/systemd/。两种模式的 systemctl 和日志命令不同,不要混用。

为专用账号创建目录,并确认其他用户不能修改单元文件。rootless 服务若需在退出登录后继续运行,应由管理员评估并配置用户 linger。系统侧账户和 SSH 管理可参考Linux 安全基线

创建第一个 container 单元

建立 web.container

INI
[Unit]
Description=Rootless web container
After=network-online.target

[Container]
Image=docker.io/library/nginx:alpine
PublishPort=127.0.0.1:8080:80
Volume=webdata.volume:/usr/share/nginx/html:Z

[Service]
Restart=on-failure
TimeoutStartSec=300

[Install]
WantedBy=default.target

端口只绑定本机,适合由反向代理提供外部入口。镜像应在生产中固定到经过验证的标签或摘要,避免重启时意外取得不同内容。TimeoutStartSec 为首次拉取镜像留出时间;官方文档提醒,拉取或构建可能超过 systemd 默认启动等待。

创建持久卷并加载

建立 webdata.volume

INI
[Volume]
VolumeName=webdata
Label=purpose=web

执行 systemctl --user daemon-reload 后,生成器会创建对应服务。用 systemctl --user start web.service 启动,再通过 systemctl --user status web.servicejournalctl --user -u web.service 检查。Quadlet 生成的服务本身不应直接执行传统 enable;开机关系由源文件的 [Install] 部分声明并在重新加载时生成。

卷提供持久数据,但不是备份。删除容器通常不会删除命名卷,删除卷则可能造成数据不可恢复。应建立独立备份,并参考Docker Compose 数据备份教程理解数据库一致性与恢复演练。

配置依赖、机密与更新

多个容器可通过 .network.volume 和 Unit 依赖建立启动顺序。不要仅依靠容器启动顺序判断应用已经就绪;数据库和 Web 服务仍需要健康检查、重试或显式等待机制。机密不要直接写入可读的 Quadlet 文件或镜像,应使用 Podman secret 或权限受限的环境文件。

更新镜像前,先备份数据,拉取目标版本并在临时端口验证。然后重启服务,观察日志和业务状态。保留上一版本镜像及回退步骤,避免把自动拉取最新标签当作发布策略。

排查 unit not found

如果 systemctl 找不到生成服务,最常见原因是源文件语法错误、文件路径错误或使用了当前 Podman 版本不支持的选项。官方基础指南建议通过 systemd generator 的验证模式查看具体错误。还应确认文件后缀正确、用户会话读取到预期目录,并在修改后执行 daemon-reload。

可用 systemctl --user cat web.service 查看生成结果,但不要直接编辑 /run 下的临时服务文件,因为下次重新加载会覆盖它。真正的配置来源始终是 .container.volume 等 Quadlet 文件。

上线与回滚清单

上线前验证镜像来源、端口绑定、卷挂载标签、运行账号、重启策略、日志、备份和恢复。若启用 linger,还要明确账号生命周期和资源限制。回滚时恢复旧 Quadlet 文件与旧镜像,重新加载 systemd,再核对数据格式是否仍兼容。

Quadlet 的优势在于用 systemd 管理容器生命周期,同时保留简洁的容器声明。把源文件纳入版本控制、把机密独立管理、把数据持续备份,才能让 rootless 容器成为可审计的长期服务。

所属专题:建站VPS专题
教程GsDesk 是一款基于 Cloudflare Workers 与 VPS 自托管 的开源远程桌面项目,支持 WebR…

Cloudflare Workers 免费搭建开源远程桌面完整教程:无需 VPS,支持 WebRTC P2P、D1、KV、R2、浏览器远程控制、Windows 客户端和文件传输

GsDesk 是一款基于 Cloudflare Workers 与 VPS 自托管 的开源远程桌面项目,支持 WebRTC P2P 直连,服务端仅负责 API、身份认证和 WebSocket 信令,不中转桌面视频流,大幅降低服务器带宽成本。项目支持 Cloudflare 免费套餐 部署,也可以使用 Docker 在 VPS 上自托管,内置 Windows 客户端、浏览器控制端、手机远程控制,支持 8 位设备 ID、OTP 一次性密码、永久密码、Ed25519 设备认证、JWT 身份验证、文件传输、剪贴板同步、自动重连 等完整功能。

311 阅读

教程如果你一直想拥有一个属于自己的网盘,但又不想买 VPS、维护数据库或者折腾复杂环境,那么这个基于 Cloudflare…

CloudDisk:基于 Cloudflare Workers 的免费个人网盘,无需 VPS、MySQL,支持 R2+D1+KV 一键部署

如果你一直想拥有一个属于自己的网盘,但又不想买 VPS、维护数据库或者折腾复杂环境,那么这个基于 Cloudflare Workers 的开源项目 CloudDisk 值得看看。整个系统运行在 Cloudflare 免费套餐上,文件存储使用 R2,数据库使用 D1,会话数据使用 KV,不需要 MySQL,也不需要服务器。支持多用户登录、文件夹管理、分享链接、在线预览、Office 文档查看、文本在线编辑、大文件断点续传、协作者权限管理等功能。无论是个人备份、开发者存放代码文件、团队共享资料,还是搭建自己的私有网盘,都可以直接部署到 Cloudflare,一键完成,几乎零维护成本,非常适合独立开发者、个人站长和轻量团队使用。

289 阅读

教程很多朋友在使用 Linux 服务器或者 VPS 时,经常会遇到 DNS 污染、解析慢、域名无法访问等问题。其实只需要安…

Linux 开启 DNS over HTTPS(DoH)教程:使用 Cloudflared + systemd 实现加密 DNS,防污染、防劫持

很多朋友在使用 Linux 服务器或者 VPS 时,经常会遇到 DNS 污染、解析慢、域名无法访问等问题。其实只需要安装 Cloudflare 官方的 cloudflared,并配合 systemd 自启动,就能让整个系统通过 DNS over HTTPS(DoH)进行加密解析。

242 阅读

常见问题

Quadlet 生成的 service 为什么不能直接 enable?

生成服务是 systemd generator 的产物,开机关系应写在 Quadlet 文件的 Install 部分;修改后重新加载 systemd。

rootless Quadlet 文件放在哪里?

常用路径是用户目录下的 .config/containers/systemd;命令应使用 systemctl --user,不能与 rootful 路径和命令混用。

unit not found 应先检查什么?

检查文件路径、后缀和语法,执行 daemon-reload,并用 systemd 生成器验证模式查看不受支持的选项或解析错误。

评价与回复

无需登录;审核通过后公开显示。