在 Ubuntu 24.04 中用 Podman 配置 rootless 容器开机自启动(Nginx Proxy Manager 示例)
目录
🚀 在 Ubuntu 24.04 中使用 Podman 配置 rootless 容器开机自启动(以 Nginx Proxy Manager 为例)
在 Ubuntu Server 环境中使用 Podman 运行容器时,经常会遇到以下问题:
- 容器无法开机自启动
systemctl --user报错:Failed to connect to bus: No medium found- rootless 模式与 root 模式混用导致容器无法管理
podman generate systemd找不到容器- 主机重启后容器丢失、无法自动重启
本文将从实际故障出发,系统性总结 如何正确为 Podman rootless 容器启用 systemd 自动启动机制。
🧩 背景:Podman rootless 容器与 systemd 的特殊关系
Podman 与 Docker 不同:
| 特性 | Docker | Podman |
|---|---|---|
| rootless 支持 | 部分 | 完整 |
| 容器存储位置 | root 专属 | root / 用户隔离 |
| 开机自动启动 | --restart |
systemd(推荐) |
Podman 官方明确推荐使用 systemd 管理容器自动启动,而不是 Docker 风格的 --restart=always。
但前提是你必须确保:
- 容器属于哪一个用户(root / ubuntu)
- user systemd 是否激活
- 是否启用了 linger
- 是否存在有效的 dbus 用户 session
否则会出现常见错误:
Error: no such container
Failed to connect to bus: No medium found
Cannot manage rootless container as root🧨 问题 1:podman generate systemd 找不到容器
当以 root 执行:
podman generate systemd --name nginx-proxy-manager返回:
nginx-proxy-manager does not refer to a container原因:
👉 容器并不是 root 创建的,而是 ubuntu 用户创建的 rootless 容器。 root 无法看到 ubuntu 用户的容器,这是 Podman 的安全机制。
解决方法:
✔ 切换到 ubuntu 用户再生成 systemd:
sudo -iu ubuntu
podman generate systemd --name nginx-proxy-manager --files --new🧨 问题 2:systemctl --user 报错 “No medium found”
当执行:
systemctl --user daemon-reload出现:
Failed to connect to bus: No medium found原因:
👉 因为你不是通过正常的登录 session 进入 ubuntu,而是使用:
sudo -iu ubuntu这种方式 不会启动 user systemd,也没有 DBus session。
🧩 解决方案:正确激活 user systemd
1. 为用户开启 linger(允许用户 systemd 在后台运行)
sudo loginctl enable-linger ubuntu2. 启动 [email protected]
sudo systemctl start [email protected](1000 是 ubuntu UID)
3. 重新以 ubuntu 身份登录 SSH(关键)
退出所有会话并重新登录:
ssh ubuntu@server此时 user systemd、dbus session 会自动加载。
4. 验证 systemctl 已正常
systemctl --user daemon-reload无报错即成功。
🧨 问题 3:systemd 服务启动失败(rootless 网络)
之前 systemd 报错:
unable to start container ... permission denied原因:
👉 rootless 容器必须由用户 systemd 管理,而不能由 root systemd 管理。 你必须让 systemctl 以用户模式运行容器。
🎯 正确配置 Podman 容器开机自启动(rootless 模式)
完整步骤如下👇
① 切换到 ubuntu 用户
sudo -iu ubuntu② 生成 systemd 服务文件
podman generate systemd --name nginx-proxy-manager --files --new生成文件:
container-nginx-proxy-manager.service③ 复制到用户 systemd 目录
mkdir -p ~/.config/systemd/user
mv container-nginx-proxy-manager.service ~/.config/systemd/user/④ 激活用户服务
systemctl --user daemon-reload
systemctl --user enable container-nginx-proxy-manager
systemctl --user start container-nginx-proxy-manager⑤ 检查状态
systemctl --user status container-nginx-proxy-manager输出类似:
Active: active (running)⑥ 强制开启用户 systemd 后台运行(防止冷启动失败)
sudo loginctl enable-linger ubuntu🔥 重启验证
sudo reboot重启后检查:
podman ps
systemctl --user status container-nginx-proxy-manager容器应自动启动。
🏁 最终结果
经过以上配置,你将获得:
✔ 完整的 Podman rootless 自动启动体系
✔ 容器随系统启动、崩溃自动重启
✔ 用户级 systemd 与容器绑定
✔ 无需 root 权限管理容器(更安全)
✔ 完美支持 Nginx Proxy Manager、PostgreSQL 等服务
📌 常用管理命令
| 操作 | rootless systemd 命令 |
|---|---|
| 启动容器 | systemctl --user start container-xxx |
| 停止容器 | systemctl --user stop container-xxx |
| 重启容器 | systemctl --user restart container-xxx |
| 查看日志 | journalctl --user -u container-xxx -f |
| 查看容器列表 | podman ps |
📚 结语
通过正确配置 user systemd + Podman rootless 模式,你可以:
- 在无 root 权限的环境运行持久化服务
- 实现完全自动化的容器生命周期控制
- 避免 Podman 与 systemd 之间的权限冲突
- 获得比 Docker 更安全的运行模型
WenHaoFree