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/system
cd /etc/systemd/system
systemctl enable --now container-*
文档
更多推荐



所有评论(0)