背景
最近写了些python
脚本打算把它们都扔到Docker
里面去跑。写完Dockerfile
测试好,push
上服务器运行时报错了。
1 | WARNING: The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64) and no specific platform was requested |
原因
看到提示突然想起来:我现在用的是M1 MacBook
,TMD 的默认 build
出来的镜像是 linux/arm64/v8
架构的呀!
好在 M1 Mac
上的 Docker Tech Preview
也支持使用 buildx
构建多架构的镜像,稍微设置一下就可以了。
题外话,
M1 MacBook Pro
真的很好用,建议早买早享受
解决
Docker
默认的 builder
命令不支持跨平台构建任务,我们需要使用 buildx
插件。
1 | docker buildx build --platform linux/amd64 -t m1_builder:v1 . |
–platform 参数就是要构建的目标平台,这里我就选了服务器用的
linux/amd64
。最后的 .(构建路径)注意不要忘了加。
buildx
和 docker build
命令的使用方式基本一样,还支持 build
常用的选项如 -t
、-f
等。其中 platform
就是支持的架构,跨平台构建的底层是用 QEMU
实现的。
构建完 push
上服务器去后,就能正常运行啦~
参考
How to build x86 (and others!) Docker images on an M1 Mac
How to Actually Deploy Docker Images Built on M1 Macs With Apple Silicon
使用 buildx 构建多种系统架构支持的 Docker 镜像
以上。