【问题标题】:Building arm Docker images from Windows doesn't work on target machine从 Windows 构建 arm Docker 映像在目标计算机上不起作用
【发布时间】:2021-06-16 05:30:33
【问题描述】:

我正在从 Windows 10 构建一个 linux/arm/v7 映像,以在运行 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 而不是目标平台上工作?

【问题讨论】:

    标签: linux docker arm multiarch


    【解决方案1】:

    我仍然不知道发生了什么,但 Windows 肯定是为错误的目标平台构建的。

    在 Windows 上运行:

    $ docker run harvzor/nginx-multi-arch-cross-compile@sha256:20a63dd8ee5daab206baef00bffc9bf316a93ebca452ff531c0202f6c22ee0c1 uname -m
    x86_64
    

    很明显,创建了错误的图像。

    我想我会测试为多个平台构建:

    docker buildx build --platform linux/amd64,linux/arm/v7 -t harvzor/nginx-multi-arch-cross-compile --push .
    

    而这次是linux/arm/v7

    $ docker run harvzor/nginx-multi-arch-cross-compile@sha256:64c586e218d433680dd13aa92f4e47ddd3a29147049f728b10a2b5070225d22b uname -m
    armv7l
    

    终于创建了正确的版本。

    请注意,我很确定我在使用 CI 构建的 Rust Docker 映像时也遇到过这种情况,该映像也无法在我的 Pi 上运行!

    【讨论】:

      猜你喜欢
      • 2020-10-16
      • 1970-01-01
      • 2019-03-25
      • 2019-12-02
      • 1970-01-01
      • 2020-07-13
      • 2018-02-10
      • 2018-06-30
      • 1970-01-01
      相关资源
      最近更新 更多