BOSh
文章81
标签26
分类5

一言

文章归档

【podman实践】podman设置开机自启动和后台运行

【podman实践】podman设置开机自启动和后台运行

在 Podman (尤其是 Rootless 环境) 中,设置容器开机自启动目前有两套主流方法。根据你刚才的报错提示,Quadlet 是官方目前最推荐的“新标准”。

以下是详细总结:

方法一:Quadlet 方式 (新标准,推荐)

这种方法不需要你手动创建容器,只需写一个类似 .ini 的配置文件,Systemd 会自动帮你管理。

  1. 开启用户实例持久化 (只需执行一次):

    Bash

    1
    loginctl enable-linger $USER
  2. 创建配置目录

    Bash

    1
    mkdir -p ~/.config/containers/systemd/
  3. 编写 .container 文件 (例如 myservice.container):

    Ini, TOML

    1
    2
    3
    4
    5
    6
    7
    8
    [Container]
    Image=docker.io/library/nginx:latest
    ContainerName=my-nginx
    Network=host
    # 自动挂载等配置...

    [Install]
    WantedBy=default.target
  4. 生效

    Bash

    1
    2
    systemctl --user daemon-reload
    systemctl --user start myservice.service

方法二:传统 Systemd 生成方式 (已过时,但常用)

这是你之前尝试的方法,它基于已经手动创建并运行的容器。

  1. 开启持久化loginctl enable-linger $USER

  2. 生成服务文件

    Bash

    1
    2
    mkdir -p ~/.config/systemd/user/
    podman generate systemd --name 容器名 --files --new
  3. 激活服务

    Bash

    1
    2
    systemctl --user daemon-reload
    systemctl --user enable --now container-容器名.service

方法三:Autostart 策略 (最简单,但依赖环境)

如果你的 Podman 版本支持,且你不需要复杂的 Systemd 管理,可以利用 Podman 自带的重启策略:

  1. 启动容器时加上策略

    Bash

    1
    podman run -d --restart always --name my-app ...
  2. 启动 Podman 重启服务:

    必须启动系统自带的 podman-restart 服务,它会在开机时检查所有标记为 always 的容器:

    Bash

    1
    systemctl --user enable --now podman-restart.service

核心对比与建议

特性 Quadlet (方法一) 传统 Systemd (方法二) Restart 策略 (方法三)
官方态度 推荐 (新标准) 已弃用 (Deprecated) 补充方案
配置方式 声明式 (改文件即改容器) 过程式 (先有容器后有服务) 属性式 (run 参数)
适用场景 长期运行的服务、基础设施 临时容器快速转服务 简单的单容器重启
优点 干净、Systemd 原生支持 简单直接 学习成本最低
本文作者:BOSh
本文链接:http://bosh.zz.ac/posts/1427767319.html
版权声明:本文由BoSh发布,部分内容来源于网络。