14.5. 使用 Podman 生成 systemd 单元文件

Podman 允许 systemd 控制和管理容器进程。您可以使用 podman generate systemd 命令为现有的容器和 pod 生成一个 systemd 单元文件。建议使用 podman generate systemd,因为生成的单元文件会频繁变化(通过对 Podman 的更新),并使用 podman generate systemd 确保获取最新版本的单元文件。

注意

从 Podman v4.6 开始,您可以使用描述如何以类似于常规 systemd 单元文件的格式运行容器的 Quadlets ,并隐藏了在 systemd 下运行容器的复杂性。

先决条件

  • container-tools 元数据包已安装。

流程

  1. 创建容器(如 myubi):

    $ podman create --name myubi registry.access.redhat.com/ubi9:latest sleep infinity
    0280afe98bb75a5c5e713b28de4b7c5cb49f156f1cce4a208f13fee2f75cb453
  2. 使用容器名称或 ID 生成 systemd 单元文件,并将其定向到 ~/.config/systemd/user/container-myubi.service 文件中:

    $ podman generate systemd --name myubi > ~/.config/systemd/user/container-myubi.service

验证步骤

  • 显示生成的 systemd 单元文件的内容:

    $ cat ~/.config/systemd/user/container-myubi.service
    # container-myubi.service
    # autogenerated by Podman 3.3.1
    # Wed Sep  8 20:34:46 CEST 2021
    
    [Unit]
    Description=Podman container-myubi.service
    Documentation=man:podman-generate-systemd(1)
    Wants=network-online.target
    After=network-online.target
    RequiresMountsFor=/run/user/1000/containers
    
    [Service]
    Environment=PODMAN_SYSTEMD_UNIT=%n
    Restart=on-failure
    TimeoutStopSec=70
    ExecStart=/usr/bin/podman start myubi
    ExecStop=/usr/bin/podman stop -t 10 myubi
    ExecStopPost=/usr/bin/podman stop -t 10 myubi
    PIDFile=/run/user/1000/containers/overlay-containers/9683103f58a32192c84801f0be93446cb33c1ee7d9cdda225b78049d7c5deea4/userdata/conmon.pid
    Type=forking
    
    [Install]
    WantedBy=multi-user.target default.target
    • Restart=on-failure 行设置重启策略,并指示 systemd 在服务无法启动或无法完全停止服务时重启,或者当进程非零退出时重启。
    • ExecStart 行描述了如何启动容器。
    • ExecStop 行描述了如何停止和移除容器。