目前下载docker大家都是用proxy方式去下载,由于什么原因都懂,这里不讨论
用proxy下载方式就变成是这样,以 dockerpull.cn为例:
docker pull dockerpull.cn/nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
docker tag dockerpull.cn/nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04 nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
但并不是每次都那么幸运,要更换不同代理来来回回下载,
那么为了方便更好的下载,这里整理了一些proxy,并整理成 dockerpull 脚本,逻辑是一样,你可以这样使用,使用过程比原来的方式少输入一个空格即可:
如:
本应该这样拉:
docker pull nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
现在你可以这样拉
dockerpull nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
这样我找了一些现有已知的proxy,如你有发现新的,也可手动加上:
# 定义镜像源列表
MIRROR_LIST=(
"dockerproxy.net"
"cr.laoyou.ip-ddns.com"
"docker.1panel.live"
"image.cloudlayer.icu"
"hub.fast360.xyz"
"docker-0.unsee.tech"
"docker.1panelproxy.com"
"docker.tbedu.top"
"dockerpull.cn"
"docker.m.daocloud.io"
"hub.rat.dev"
"docker.kejilion.pro"
"docker.hlmirror.com"
"docker.imgdb.de"
"docker.melikeme.cn"
"ccr.ccs.tencentyun.com"
"pull.loridocker.com"
"docker.sunzishaokao.com"
"dockerhub.icu"
"docker.wanpeng.top"
"docker.anyhub.us.kg"
"docker.fxxk.dedyn.io"
)
废话不说,上dockerpull脚本,自行保存为dockerpull,并chmod +x dockerpull:
#!/bin/bash
# 检查是否提供了镜像名称参数
if [ -z "$1" ]; then
echo "Usage: $0 <image_name:tag>"
exit 1
fi
# 定义镜像源列表
MIRROR_LIST=(
"dockerproxy.net"
"cr.laoyou.ip-ddns.com"
"docker.1panel.live"
"image.cloudlayer.icu"
"hub.fast360.xyz"
"docker-0.unsee.tech"
"docker.1panelproxy.com"
"docker.tbedu.top"
"dockerpull.cn"
"docker.m.daocloud.io"
"hub.rat.dev"
"docker.kejilion.pro"
"docker.hlmirror.com"
"docker.imgdb.de"
"docker.melikeme.cn"
"ccr.ccs.tencentyun.com"
"pull.loridocker.com"
"docker.sunzishaokao.com"
"dockerhub.icu"
"docker.wanpeng.top"
"docker.anyhub.us.kg"
"docker.fxxk.dedyn.io"
)
# 用户输入的目标镜像名称
USER_INPUT_IMAGE="$1"
# 判断是否需要添加 library/ 前缀
if [[ "$USER_INPUT_IMAGE" != */* ]]; then
TARGET_IMAGE="library/$USER_INPUT_IMAGE"
else
TARGET_IMAGE="$USER_INPUT_IMAGE"
fi
# 提取镜像名和标签
IMAGE_NAME=$(echo "$TARGET_IMAGE" | sed 's/library\///' | sed 's/:.*//')
IMAGE_TAG=$(echo "$TARGET_IMAGE" | sed 's/.*://')
# 遍历镜像源列表
for MIRROR in "${MIRROR_LIST[@]}"; do
echo "Trying to pull image from $MIRROR..."
# 拉取镜像
docker pull "$MIRROR/$IMAGE_NAME:$IMAGE_TAG"
if [ $? -eq 0 ]; then
echo "Successfully pulled image from $MIRROR/$IMAGE_NAME:$IMAGE_TAG"
# 将镜像标签改回原始的 Docker Hub 标签
docker tag "$MIRROR/$IMAGE_NAME:$IMAGE_TAG" "$TARGET_IMAGE"
echo "Tagged image as $TARGET_IMAGE"
# 删除临时镜像
docker rmi "$MIRROR/$IMAGE_NAME:$IMAGE_TAG"
echo "Removed temporary image $MIRROR/$IMAGE_NAME:$IMAGE_TAG"
exit 0
else
echo "Failed to pull image from $MIRROR/$IMAGE_NAME:$IMAGE_TAG. Trying next mirror..."
fi
done
echo "Failed to pull image from all mirrors."
exit 1