目录

在 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

但前提是你必须确保:

  1. 容器属于哪一个用户(root / ubuntu)
  2. user systemd 是否激活
  3. 是否启用了 linger
  4. 是否存在有效的 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 ubuntu

2. 启动 [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 更安全的运行模型