封装一个docker-pull用来自动重试反复拉取一个镜像

运维有笔谈 2025-02-18 06:30:34

AI制作

经常在docker pull一个镜像出现失败的情况,尤其是一些镜像比较大,不得不再次执行docker pull,有时候需要执行个三四次才能完全拉取成功(网络或者仓库代理等各种因素)。我翻阅了不少资料没有找到一个合适的docker pull内置的重试机制,基本是借助于脚本来实现重试。

我们可以创建一个shell脚本文件docker-pull,并将其作为命令行工具使用,后面直接跟镜像地址作为参数,替代docker pull命令。这样就不需要修改脚本,直接调用这个docker-pull工具即可。

新建一个docker-pull.sh 文件。参考脚本为重试5次,每次间隔10秒,具体脚本内容如下:

#!/bin/bash# 检查是否提供了镜像地址if [ -z "$1" ]; then echo "用法: $0 <镜像地址>" exit 1fiIMAGE_NAME="$1"MAX_RETRIES=5RETRY_INTERVAL=10for (( i=0; i<MAX_RETRIES; i++ )); do echo "尝试第 $(($i + 1)) 次拉取镜像: $IMAGE_NAME" if docker pull "$IMAGE_NAME"; then echo "镜像拉取成功!" exit 0 else echo "镜像拉取失败,等待 $RETRY_INTERVAL 秒后重试..." sleep $RETRY_INTERVAL fidoneecho "多次尝试拉取镜像失败,请检查网络或镜像源。"exit 1

然后添加可执行权限并复制到默认$PATH,

如/usr/local/sbin,/usr/local/bin,/usr/sbin等等。具体参考如下:

chmod +x docker-pull.shcp docker-pull.sh /usr/bin/docker-pulldocker-pull victoriametrics/victoria-logs

经过测试,docker pull 镜像拉取失败会重试多次,可以实现需求。

0 阅读:3

运维有笔谈

简介:感谢大家的关注