Podman容器开机自启
Podman容器开机自启
Podman是没有像docker-daemon守护进程的,开机启动需要利用Linux系统的 systemd 实现开机启动。
实现podman容器开机自启 3种方式:
- 使用
podman-restart.service
,操作比较方便 - 使用
podman generate systemd
生成启动*.service
- 使用 Quadlet 实现(本文未涉及),可参考 Make systemd better for Podman with Quadlet
一、使用 podman-restart.service
和 Docker 一样设置 --restart
选项,而 Podman 依赖 podman-restart.service
实现开机启动:
容器使用 --restart 选项:
podman run -it --restart=always -d redis# 启动 podman-restart 服务
systemctl --user enable --now podman-restart# 不登录用户,也开启 systemd 服务。否则 退出用户服务就停止了!!!
loginctl enable-linger <username>
说明:启动 podman-restart,才能实现开机自启。
compose中配置 restart:
serivces:app:build: .restart: always
二、使用 podman generate systemd 实现开机自启
在创建服务之前,先区分 镜像、容器、吊舱(Pod)概念。
这里服务本身是基于 容器或吊舱的,所以需先创建 容器或吊舱。
# 先创建容器,同运行一样。podman run --name 是创建并运行
podman create --name <容器名称> \-p <主机端口>:<容器端口> \-e <环境变量名>=<环境变量值> \<镜像名称>
2.1 容器或Pod生成 .service 文件
# --name 指定名称的容器/pod,而非容器ID
podman generate systemd --files --name <pod/conatainer_name># 移动到用户目录,并启动
mv container-*.service ~/.config/systemd/user/systemctl --user enable --now container-*
2.2 compose.yml 文件生成 .service
podman-compose --in-pod pod_name up --no-start
sudo podman-compose systemd -a create-unit
podman-compose systemd -a register
三、操作案例
使用 podman-compose
启动后,podman-compose ps
或 podman ps
获取当前的容器名(NAMES),根据容器名创建:
# vap_minio 就是容器名,默认是 到标准输出 控制台
podman generate systemd --name vap_minio# --files 保存到文件
podman generate systemd --files --name vap_minio# 生成在当前目录,名为 container-xxx.service
# 用户 服务 在 ~/.config/systemd/user/ 目录
mv container-*.service ~/.config/systemd/user/# --now 是否立即启动,还是下次 系统启动时
systemctl --user enable --now container-*
注:但是以登录用户 启动,当用户退出时,就会 停止 服务。
解决方法:
- 使用
loginctl enable-linger <username>
启用用户常驻 - 改为 系统服务方式
移动到系统目录:
mv container-*.service /etc/systemd/systemcd /etc/systemd/systemsystemctl enable --now container-*
文档
- 14.5. 使用 Podman 生成 systemd 单元文件
- linux podman docker如何设置支持restart policy
- podman-run restart-policy | Podman
- podman generate systemd
- How to run pods as systemd services with Podman
- https://github.com/containers/podman-compose/issues/307
- How to run pods as systemd services with Podman