docker.io 被封了后如何下载国外镜像与使用
需要科学上网工具,在本地电脑上开启
用docker pull —platform=linux/amd64 [镜像地址]
拉取后
用docker save -o xxx.tar [镜像名称]
保存成 tar 文件
将该文件上传至服务器
再用docker load < xxx.tar
将其导入
操作过于繁琐,所以笔者这里用 typescript 写了一个脚本来完成
typescript
import { execSync } from "node:child_process";
import { NodeSSH } from "node-ssh";
const textDecoder = new TextDecoder();
const $ = (command: string) => textDecoder.decode(execSync(command));
const ssh = new NodeSSH();
await ssh.connect({
host: process.env.SSH_HOST,
username: process.env.SSH_USERNAME,
password: process.env.SSH_PASSWORD,
});
const images = [
// flannel相关
// "docker.io/flannel/flannel:v0.25.6",
// "docker.io/flannel/flannel-cni-plugin:v1.5.1-flannel2",
// longhorn相关
// "docker.io/longhornio/longhorn-manager:v1.7.1",
// "docker.io/longhornio/longhorn-ui:v1.7.1",
// "docker.io/longhornio/longhorn-share-manager:v1.7.1",
// ingress-nginx相关
// "registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.4.3",
// "registry.k8s.io/ingress-nginx/opentelemetry-1.25.3:v20240813-b933310d",
// "registry.k8s.io/ingress-nginx/controller:v1.11.2"
"registry.k8s.io/pause:3.8",
];
for (const image of images) {
const tarname = `${image.replace(/\//g, "-")}.tar`;
// 拉取镜像
console.log("docker pull", $(`docker pull --platform=linux/amd64 ${image}`));
// 将镜像导出成tar文件
console.log("docker save", $(`docker save -o ${tarname} ${image}`));
// 上传文件至服务器
console.log("putFile", await ssh.putFile(`${tarname}`, `${tarname}`));
// 远程服务器导入该镜像
console.log(
"load",
// containerd
// await ssh.execCommand(`
// ctr -n k8s.io image import ${tarname}
// rm -f ${tarname}
// `)
// docker
await ssh.execCommand(`
docker load < ${tarname}
rm -f ${tarname}
`)
);
}
ssh.dispose();
只需要在 images 中写入要同步的镜像地址,运行该脚本即可自动完成拉取、导出、上传与导入操作(需要本地安装 docker,运行脚本需要 node 环境)
源码在github
Comments | 1条评论
1