前言

由于项目需求,生成环境没办法连接外网,而且是64位的ARM机器,开发环境是64位的AMD(X86)机器,这里会涉及到跨架构拉取Docker镜像,在AMD机器上拉取ARM的镜像(Docker默认是拉取当前系统架构的镜像包,也就是AMD,这个镜像包无法在生成环境运行)

第一步,找到需要的镜像

这里以Postgres为例子,https://hub.docker.com/_/postgres/tags
自行挑选需要的Tag

Snipaste_2024-06-01_11-44-37

第二步,选择需要的OS/ARCH

Snipaste_2024-06-01_11-44-37-1717213653650

第三步,复制镜像名称和MANIFEST DIGEST,拼接处理

注意:不是复制镜像名称下的 INDEX DIGEST,复制错了任然会
Snipaste_2024-06-01_11-44-37-1717213846778

拼接后内容

说明:{{镜像名称}}@{{MANIFEST DIGEST}}

postgres:alpine3.20@sha256:b4813980af3fad899843b334355f17a8006694a4ec280bd9b62fe8066d86d44d

第四步,拉取镜像

说明:docker pull {{第三步,拼接处理的内容}}

docker pull postgres:alpine3.20@sha256:b4813980af3fad899843b334355f17a8006694a4ec280bd9b62fe8066d86d44d

执行完这一步后,通过docker images命令可以看到postgres:alpine3.20镜像,注意:由于是Arm64的包,不符合当前系统架构,所以无法在本系统运行,需要将镜像导出为本地文件

第五步,导出镜像文件

说明:docker save -o {{导出的文件名}} {{需要导出的镜像名称+tag,也可以是镜像id(使用镜像id,将导致重新导入时,tag为none)}}

docker save -o postgres:alpine3.20_arm64.tar.gz postgres:alpine3.20

最后,将postgres:alpine3.20_arm64.tar.gz拷贝到对应的机器上导入镜像

说明:docker load -i {{镜像文件}}

docker load -i postgres:alpine3.20_arm64.tar.gz

导入后通过docker images查看镜像是否存在,导入后和docker pull拉取的镜像一样使用