我正在linux/arm/v7
从 Windows 10 构建一个映像,以在运行 32 位操作系统的 Raspberry Pi 上运行。
Dockerfile
FROM nginx:1.19.8-alpine
CMD nginx -g 'daemon off;'
构建和推送
在 Windows 上,我运行:
docker buildx build --platform linux/arm/v7 -t harvzor/nginx-multi-arch-cross-compile --push .
docker inspect image harvzor/nginx-multi-arch-cross-compile
在构建的图像上运行会产生:
[
{
// ...
"Architecture": "arm",
"Os": "linux",
// ...
}
]
Docker Hub 将映像识别为arm
基于。
https://hub.docker.com/repository/docker/harvzor/nginx-multi-arch-cross-compile
拉动并运行(错误!)
然后我在 Raspberry Pi 上拉下相同的图像并尝试运行它,这是输出:
$ docker run harvzor/nginx-multi-arch-cross-compile
standard_init_linux.go:211: exec user process caused "exec format error"
failed to resize tty, using default size
细节
我的图像基于nginx:1.19.8-alpine,它有一个linux/arm/v7
OS/ARCH。
在 Windows 上检查 buildx 会产生:
$ docker buildx inspect
Name: default
Driver: docker
Nodes:
Name: default
Endpoint: default
Status: running
Platforms: linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
如果我尝试在 Windows 上运行此映像,它运行良好(尽管我认为它不应该,因为它是为 arm 构建的)。
Windows Docker 版本
$ docker -v
Docker version 19.03.13, build 4484c46d9d
docker buildx version
github.com/docker/buildx v0.4.2-tp-docker fb7b670b764764dc4716df3eba07ffdae4cc47b2
问题
我究竟做错了什么?为什么图像在 Windows 而不是目标平台上工作?