【问题标题】:Docker exec /bin/sh: exec format error on Arm64Docker exec /bin/sh:Arm64 上的 exec 格式错误
【发布时间】:2022-12-30 06:05:30
【问题描述】:

我的 Dockerfile 在 x86 机器上工作,但在 arm64 架构的机器上失败;特别是a1.2xlargeaws EC2-instance)。

运行错误docker compose up -d

#0 0.462 exec /bin/sh: exec format error
------
failed to solve: executor failed running [/bin/sh -c apt-get update]: exit code: 1

Dockerfile 看起来像这样

FROM phusion/passenger-ruby27
ENV HOME /root
RUN apt-get update

泊坞窗-v

Docker version 20.10.17, build 100c701

uname -a

Linux Ubuntu SMP Thu Jun 9 13:06:11 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux

lsb_release -a

Ubuntu 20.04.4 LTS

【问题讨论】:

  • 这似乎是预料之中的,因为处理器架构不同。您可以改为提供基于 x86 的 EC2 实例吗?
  • 我在这里从头开始构建一个 docker 镜像。那么架构有何不同呢?并在RUN apt-get update 上抛出错误;它应该在任何架构上运行。此外,我正在使用 AWS 保留实例,并且无法从 a1.2xlarge 移走。
  • 您不是从头开始构建图像,而是基于另一个图像构建图像,该图像仅在 linux/amd64 上受支持。因此,您的处理器架构与@DavidMaze 所述不同。如果您有权访问基础映像的 Dockerfile,则可以在您的文件中包含这些步骤,或者也可以在本地为您的架构重建它。

标签: docker arm64


【解决方案1】:

phusion/passenger-ruby27 存储库通过标签分隔基于 arm64 的图像(截至 2022 年 11 月)。

IE。 2.3.12.3.1-arm64

假设你想建立一个arm64你的形象arm64例如,解决此问题的一种简单方法是将标记作为构建参数传递。

文件:

ARG BASE_TAG
FROM phusion/passenger-ruby27:$BASE_TAG
ENV HOME /root
RUN apt-get update

构建示例:

# on arm
$ docker build --build-arg BASE_TAG=2.3.1-arm64 .

# on amd
$ docker build --build-arg BASE_TAG=2.3.1 .

【讨论】:

    猜你喜欢
    • 2022-11-03
    • 2022-08-18
    • 1970-01-01
    • 2022-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-25
    • 2022-01-13
    相关资源
    最近更新 更多