You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在EC2成功拉取Docker镜像后触发Shell脚本?

在EC2实例上Docker镜像拉取成功后触发Shell脚本的实现方案

当然有可行的方案,下面给你几个实用的实现方式,都是基于你提到的docker events工具来做的:

方法一:编写Docker事件监控脚本

直接利用docker events监听镜像拉取成功的事件,一旦捕获到就执行你的目标脚本。

步骤1:创建监控脚本

新建一个docker_pull_monitor.sh文件,内容如下:

#!/bin/bash

# 监听Docker镜像拉取成功的事件,过滤条件为类型是image、事件是pull
docker events --filter 'type=image' --filter 'event=pull' | while read -r event_line; do
    # 从事件输出中提取镜像名称(可选,如果你需要给目标脚本传递镜像名参数)
    target_image=$(echo "$event_line" | awk '{print $NF}')
    
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] 检测到镜像 $target_image 拉取成功,开始执行目标脚本..."
    # 替换成你的实际脚本路径,这里可以传递镜像名作为参数
    /home/ec2-user/your_script.sh "$target_image"
    
    # 如果需要日志记录,可以把输出重定向到日志文件
    # /home/ec2-user/your_script.sh "$target_image" >> /var/log/docker_hook.log 2>&1
done

步骤2:赋予脚本执行权限

chmod +x docker_pull_monitor.sh /home/ec2-user/your_script.sh

步骤3:启动监控

可以用nohup让脚本后台持续运行:

nohup ./docker_pull_monitor.sh &

这样即使退出SSH会话,监控脚本也会继续运行。

方法二:用Systemd服务托管监控脚本(适合EC2生产环境)

如果你的EC2实例需要长期运行,推荐把监控脚本做成Systemd服务,这样系统重启后会自动恢复监控,更稳定。

步骤1:创建Systemd单元文件

新建/etc/systemd/system/docker-pull-hook.service文件,内容如下:

[Unit]
Description=Monitor Docker image pull success and trigger script
After=docker.service
Requires=docker.service

[Service]
User=ec2-user  # 替换成你的EC2用户名,比如ec2-user
ExecStart=/home/ec2-user/docker_pull_monitor.sh
Restart=always  # 脚本意外退出时自动重启
RestartSec=5  # 重启间隔5秒
StandardOutput=journal+console  # 日志输出到Systemd日志

[Install]
WantedBy=multi-user.target

步骤2:启用并启动服务

# 重新加载Systemd配置
sudo systemctl daemon-reload

# 设置开机自启并立即启动服务
sudo systemctl enable --now docker-pull-hook.service

查看服务状态与日志

# 查看服务运行状态
sudo systemctl status docker-pull-hook.service

# 查看监控脚本的日志
journalctl -u docker-pull-hook.service -f

额外注意事项

  • 如果只需要监听特定镜像的拉取事件,可以在docker events命令中添加镜像过滤,比如--filter 'image=nginx:*',这样只会触发nginx镜像的拉取事件
  • 可以扩展脚本,监听pull_failed事件来处理拉取失败的场景,只需把--filter 'event=pull'改成--filter 'event=pull_failed'
  • 确保EC2实例的Docker服务正常运行,且执行监控脚本的用户有Docker操作权限(可以把用户加入docker组:sudo usermod -aG docker ec2-user)

内容的提问来源于stack exchange,提问作者higuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 12:21:03