M 系列 Mac 如何拉取运行非 ARM 架构的镜像

背景

  1. 我想运行一个镜像,发现他没有对应 arm 架构镜像,只有 linux/amd64, 案例
  2. 群晖上的 docker 无法拉取镜像,需要在本地拉取镜像,然后上传到群晖里

正文

如何运行和拉取非 ARM 架构镜像

直接运行 AMD 的镜像

报错如下

1
2
docker run vitess/lite:mysql84
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested

通过 Rosetta 运行 AMD 镜像

我们需要使用 OrbStack (优势 -> 远比 Docker for Mac 资源占用低)

  1. 开启使用 Rosetta 运行 intel OrbStack 配置
  2. 运行时指定架构 -> docker run --platform linux/amd64 vitess/lite:mysql84

在本地拉取镜像,然后上传到群晖里

直接放脚本

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
set -e
set -x

image_name=$1
nas_ip="192.168.100.123"

docker pull --platform linux/amd64 $image_name
mkdir -p ~/Downloads/temp_images
docker save $image_name | gzip > ~/Downloads/temp_images/temp_image.tgz
scp ~/Downloads/temp_images/temp_image.tgz $nas_ip:~/temp_image.tgz
ssh $nas_ip "ls -l ~/temp_image.tgz; gunzip -c ~/temp_image.tgz | /usr/bin/docker load"