如何通过Portainer自动拉取并重新部署latest标签镜像?
自动化更新Docker Compose Stack的Latest镜像
方案1:利用Portainer Webhook+定时任务
Portainer自带Webhook功能,可触发「Pull and Redeploy」动作,结合系统定时任务就能实现自动化:
- 进入Portainer的目标Stack详情页,打开「Webhooks」选项
- 创建新Webhook,选择「Pull and redeploy」动作,复制生成的Webhook地址
- 用系统定时工具(Linux用
cron,Windows用任务计划程序)每天定时发送POST请求到该地址。例如用curl执行:curl -X POST https://你的Portainer地址/api/webhooks/xxxxxx - 配置
cron每天凌晨2点执行的规则示例:0 2 * * * curl -X POST https://你的Portainer地址/api/webhooks/xxxxxx
方案2:Shell脚本+定时任务
不依赖Portainer的话,直接用脚本配合定时任务完成更新:
- 编写Shell脚本(比如
update-stack.sh):#!/bin/bash cd /你的docker-compose文件目录 # 拉取最新镜像 docker-compose pull # 重启服务(仅更新镜像有变化的容器) docker-compose up -d - 给脚本添加执行权限:
chmod +x update-stack.sh - 配置
cron每天凌晨2点执行脚本并记录日志:0 2 * * * /脚本路径/update-stack.sh >> /var/log/stack-update.log 2>&1
方案3:使用Watchtower工具
Watchtower是专门用于自动更新Docker容器的工具,可监控镜像更新并自动拉取重启:
- 在你的docker-compose.yaml中添加Watchtower服务:
services: # 你的原有服务 your-service: image: 你的镜像名:latest ... # 新增Watchtower服务 watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock # 设置每天凌晨2点检查更新,--cleanup会删除旧镜像 command: --schedule "0 0 2 * * *" --cleanup # 可选:只监控指定服务,避免更新其他容器 # command: --schedule "0 0 2 * * *" --cleanup your-service - 启动Stack后,Watchtower会按设定周期检查镜像,发现更新自动拉取并重启对应容器。若镜像仓库需要认证,需给Watchtower配置仓库凭证。
内容的提问来源于stack exchange,提问作者sleekster
相关产品推荐
相关产品推荐

