【问题标题】:docker in macOS running arm64 on amd64macOS 中的 docker 在 amd64 上运行 arm64
【发布时间】:2019-02-05 11:14:44
【问题描述】:

在 macOS (version 10.13.6) 上测试特定版本的 vault 项目时,我使用 Docker 18.06.10-ce-mac73 创建了这个 Dockerfile:

FROM ubuntu
RUN apt-get update && apt-get install -y --no-install-recommends -q curl build-essential ca-certificates git net-tools netcat unzip jq
WORKDIR /vault
RUN mkdir -p /vault/bin && \
    cd /vault/bin && \
    curl -o vault.zip -sL https://releases.hashicorp.com/vault/0.9.0/vault_0.9.0_linux_arm64.zip && unzip vault.zip
ENV PATH="/vault/bin:${PATH}"
ENTRYPOINT /bin/bash

容器出现了,我可以使用它并运行所有必需的测试,我唯一注意到的是在所有命令输出之前,我得到了这样的东西:

root@d2abe7afe964:/vault/bin# vault --version
Unknown host QEMU_IFLA type: 40
Unknown host QEMU_IFLA type: 41
Unknown host QEMU_IFLA type: 40
Unknown host QEMU_IFLA type: 41
Unknown QEMU_IFLA_INFO_KIND ipip
Unknown host QEMU_IFLA type: 40
Unknown host QEMU_IFLA type: 41
Unknown QEMU_IFLA_INFO_KIND ip6tnl
Unknown host QEMU_IFLA type: 40
Unknown host QEMU_IFLA type: 41
Vault v0.9.0 ('bdac1854478538052ba5b7ec9a9ec688d35a3335')

一位同事使用 Linux(Ubuntu) 无法运行vault 命令,他得到的错误是:

exec error command failed

在详细检查后,问题是 Dockerfile 使用的是 vault_0.9.0_linux_arm64.zip 而不是 vault_0.9.0_linux_amd64.zip。错误地,使用了arm64 的二进制文件而不是所需的amd64,令我们惊讶的是,在 macOS 环境中工作正常。

因此想更详细地了解为什么会发生这种情况,以及是否有办法在需要时以“严格”或更多 Linux“类似”的方式运行容器?

【问题讨论】:

  • 您可能对binfmtqemu-arm-static 感兴趣。基本上,您可以通过 binfmt_musc 将 arm64 二进制文件自动运行到 qemu-arm-static 之类的模拟器并运行它。

标签: linux macos docker x86-64 arm64


【解决方案1】:

因为 MacOS(你的机器)上的 Docker 自带了一个 Linux 虚拟机(Docker 容器需要 Linux 内核的一些特性才能运行,所以它不能单独在 MacOS 上运行)。该 Linux VM 已配置 QEMU 和 binfmt_misc,因此它可以运行 arm64 容器。同时,您的朋友机器在其本机 Linux 上运行 Docker(不是通过 VM),而他的 Linux 配置不足以运行 arm64 容器。

【讨论】:

    猜你喜欢
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 2023-03-15
    • 2017-03-05
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多