在 mac M1 芯片上构建 docker amd64 镜像

2024-01-14

我正在尝试以两种方式在我的 mac M1 (arm64) 上构建 dockerfile(下面是 dockerfile 的重要部分):

FROM erlang:24

# elixir expects utf8.
ENV ELIXIR_VERSION="v1.12.2" \
    LANG=C.UTF-8

RUN set -xe \
    && ELIXIR_DOWNLOAD_URL="https://github.com/elixir-lang/elixir/archive/${ELIXIR_VERSION}.tar.gz" \
    && ELIXIR_DOWNLOAD_SHA256="701006d1279225fc42f15c8d3f39906db127ddcc95373d34d8d160993356b15c" \
    && curl -fSL -o elixir-src.tar.gz $ELIXIR_DOWNLOAD_URL \
    && echo "$ELIXIR_DOWNLOAD_SHA256  elixir-src.tar.gz" | sha256sum -c - \
    && mkdir -p /usr/local/src/elixir \
    && tar -xzC /usr/local/src/elixir --strip-components=1 -f elixir-src.tar.gz \
    && rm elixir-src.tar.gz \
    && cd /usr/local/src/elixir \
    && make install clean \
    && find /usr/local/src/elixir/ -type f -not -regex "/usr/local/src/elixir/lib/[^\/]*/lib.*" -exec rm -rf {} + \
    && find /usr/local/src/elixir/ -type d -depth -empty -delete

.
.
.

# docker compose
RUN COMPOSE_URL="https://circle-downloads.s3.amazonaws.com/circleci-images/cache/linux-amd64/docker-compose-latest" \
  && curl --silent --show-error --location --fail --retry 3 --output /usr/bin/docker-compose $COMPOSE_URL \
  && chmod +x /usr/bin/docker-compose \
  && docker-compose version

.
.
.
  1. using docker build -t test .

因为我正在尝试在arm64芯片上构建amd64(docker compose部分)图像。我收到此错误:

> [ 8/25] RUN COMPOSE_URL="https://circle-downloads.s3.amazonaws.com/circleci-images/cache/linux-amd64/docker-compose-latest"   && curl --silent --show-error --location --fail --retry 3 --output /usr/bin/docker-compose $COMPOSE_URL      && chmod +x /usr/bin/docker-compose          && docker-compose version:
#11 2.768 /lib64/ld-linux-x86-64.so.2: No such file or directory
------
Dockerfile:68
--------------------
  67 |     # docker compose
  68 | >>>  RUN COMPOSE_URL="https://circle-downloads.s3.amazonaws.com/circleci-images/cache/linux-amd64/docker-compose-latest" \
  69 | >>>       && curl --silent --show-error --location --fail --retry 3 --output /usr/bin/docker-compose $COMPOSE_URL \
  70 | >>>       && chmod +x /usr/bin/docker-compose \
  71 | >>>       && docker-compose version
  72 |
--------------------
error: failed to solve: process "/bin/sh -c COMPOSE_URL=\"https://circle-downloads.s3.amazonaws.com/circleci-images/cache/linux-amd64/docker-compose-latest\" \t && curl --silent --show-error --location --fail --retry 3 --output /usr/bin/docker-compose $COMPOSE_URL \t && chmod +x /usr/bin/docker-compose \t && docker-compose version" did not complete successfully: exit code: 255
  1. Using docker buildx build --platform linux/amd64 -t test .

这应该可以解决我的不兼容性问题并使用 qemu 模拟器构建映像。但我得到的与Elixir (1. dockerfile 的一部分) https://github.com/erlef/docker-elixir/blob/master/1.12/Dockerfile或 qemu 本身。

Elixir 的 dockerfile 部分应该与这两种芯片兼容,我假设它是 qemu。这是错误按摩:

> [ 2/25] RUN set -xe  && ELIXIR_DOWNLOAD_URL="https://github.com/elixir-lang/elixir/archive/v1.12.2.tar.gz"   && ELIXIR_DOWNLOAD_SHA256="701006d1279225fc42f15c8d3f39906db127ddcc95373d34d8d160993356b15c"         && curl -fSL -o elixir-src.tar.gz $ELIXIR_DOWNLOAD_URL       && echo "$ELIXIR_DOWNLOAD_SHA256  elixir-src.tar.gz" | sha256sum -c -   && mkdir -p /usr/local/src/elixir       && tar -xzC /usr/local/src/elixir --strip-components=1 -f elixir-src.tar.gz  && rm elixir-src.tar.gz         && cd /usr/local/src/elixir     && make install clean        && find /usr/local/src/elixir/ -type f -not -regex "/usr/local/src/elixir/lib/[^\/]*/lib.*" -exec rm -rf {} +        && find /usr/local/src/elixir/ -type d -depth -empty -delete:
#5 0.087 + ELIXIR_DOWNLOAD_URL=https://github.com/elixir-lang/elixir/archive/v1.12.2.tar.gz
#5 0.087 + ELIXIR_DOWNLOAD_SHA256=701006d1279225fc42f15c8d3f39906db127ddcc95373d34d8d160993356b15c
#5 0.088 + curl -fSL -o elixir-src.tar.gz https://github.com/elixir-lang/elixir/archive/v1.12.2.tar.gz
#5 0.163   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
#5 0.165                                  Dload  Upload   Total   Spent    Left  Speed
100   127    0   127    0     0    243      0 --:--:-- --:--:-- --:--:--   246
100 2402k  100 2402k    0     0  1331k      0  0:00:01  0:00:01 --:--:-- 1982k
#5 1.984 + echo 701006d1279225fc42f15c8d3f39906db127ddcc95373d34d8d160993356b15c  elixir-src.tar.gz
#5 1.984 + sha256sum -c -
#5 2.033 elixir-src.tar.gz: OK
#5 2.035 + mkdir -p /usr/local/src/elixir
#5 2.053 + tar -xzC /usr/local/src/elixir --strip-components=1 -f elixir-src.tar.gz
#5 2.193 + rm elixir-src.tar.gz
#5 2.209 + cd /usr/local/src/elixir
#5 2.209 + make install clean
#5 2.520 sys/unix/sys_signal_stack.c:269:sys_sigaltstack(): Internal error: Failed to set alternate signal stack
#5 2.521 qemu: uncaught target signal 6 (Aborted) - core dumped
#5 2.526 make: *** [Makefile:82: lib/elixir/src/elixir_parser.erl] Aborted
------
Dockerfile:7
--------------------
   6 |
   7 | >>> RUN set -xe \
   8 | >>>      && ELIXIR_DOWNLOAD_URL="https://github.com/elixir-lang/elixir/archive/${ELIXIR_VERSION}.tar.gz" \
   9 | >>>      && ELIXIR_DOWNLOAD_SHA256="701006d1279225fc42f15c8d3f39906db127ddcc95373d34d8d160993356b15c" \
  10 | >>>      && curl -fSL -o elixir-src.tar.gz $ELIXIR_DOWNLOAD_URL \
  11 | >>>      && echo "$ELIXIR_DOWNLOAD_SHA256  elixir-src.tar.gz" | sha256sum -c - \
  12 | >>>      && mkdir -p /usr/local/src/elixir \
  13 | >>>      && tar -xzC /usr/local/src/elixir --strip-components=1 -f elixir-src.tar.gz \
  14 | >>>      && rm elixir-src.tar.gz \
  15 | >>>      && cd /usr/local/src/elixir \
  16 | >>>      && make install clean \
  17 | >>>      && find /usr/local/src/elixir/ -type f -not -regex "/usr/local/src/elixir/lib/[^\/]*/lib.*" -exec rm -rf {} + \
  18 | >>>      && find /usr/local/src/elixir/ -type d -depth -empty -delete
  19 |
--------------------
error: failed to solve: process "/bin/sh -c set -xe \t&& ELIXIR_DOWNLOAD_URL=\"https://github.com/elixir-lang/elixir/archive/${ELIXIR_VERSION}.tar.gz\" \t&& ELIXIR_DOWNLOAD_SHA256=\"701006d1279225fc42f15c8d3f39906db127ddcc95373d34d8d160993356b15c\" \t&& curl -fSL -o elixir-src.tar.gz $ELIXIR_DOWNLOAD_URL \t&& echo \"$ELIXIR_DOWNLOAD_SHA256  elixir-src.tar.gz\" | sha256sum -c - \t&& mkdir -p /usr/local/src/elixir \t&& tar -xzC /usr/local/src/elixir --strip-components=1 -f elixir-src.tar.gz \t&& rm elixir-src.tar.gz \t&& cd /usr/local/src/elixir \t&& make install clean \t&& find /usr/local/src/elixir/ -type f -not -regex \"/usr/local/src/elixir/lib/[^\\/]*/lib.*\" -exec rm -rf {} + \t&& find /usr/local/src/elixir/ -type d -depth -empty -delete" did not complete successfully: exit code: 2

无论如何,我尝试使用 Rosetta 构建图像,但没有任何帮助。不过,该映像在我的 linux amd64 机器上构建得很好。

以下是我发现但对我帮助不大的相关问题:

我希望我已经提供了足够的信息,如果没有,请问我 - 感谢您的帮助。


我尝试了在 m1 上构建 amd64 docker 镜像的不同方法,发现最稳定的方法是:

  • 使用 UTM 运行 amd64 linux (https://mac.getutm.app/ https://mac.getutm.app/);
  • 使用该虚拟机作为 docker 主机来构建;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 mac M1 芯片上构建 docker amd64 镜像 的相关文章

随机推荐

  • 你可以让 mongo $push 前置而不是附加吗?

    我希望在我的集合的开头添加push add 而不是在执行mongo push 时附加到末尾 是否可以进行原子推送更新 将元素添加为第一个而不是最后一个 2014年更新 是的你可以 http docs mongodb org manual r
  • WPF FlowDocument 绑定

    我正在使用微软的XAML HTML 转换器 http msdn microsoft com en us library aa972129 aspx将 HTML 从数据库转换为 XAML 字符串 Microsoft 转换器似乎正确设置了文本格
  • urlencode() 是否足以阻止 2011 年的所有 SQL 注入攻击

    我正在将一些简单的用户数据传递到 mysql 数据库中 PHP 的 urlencode 返回一个字符串 其中包含除 之外的所有非字母数字字符 已替换为百分号 后跟两个十六进制数字 我不担心空格变成加号 或其他格式问题 我也不担心 XSS 和
  • DPDK“端口数必须为偶数”一台以太网设备

    我正在尝试从 DPDK 源代码运行骨架示例 但每当我尝试在 make 过程后构建代码时 我都会收到一条错误消息 端口数必须为偶数 但是当我尝试查看以太网设备列表时我只能看到一台设备 我在 vmware 工作站环境下的 Ubuntu 中运行框
  • 使用 Runtime.getRuntime 在 Android 上运行 shell 命令

    我正在开发一个设备管理应用程序 已由制造商签名 我使用它来安装其他应用程序 使用以下适用于 android 9 的 adb shell 命令 cat sdcard Download myfolder newapp apk pm instal
  • 如何重试 Promise 决议 N 次,并在尝试之间有延迟?

    我想要一些 JavaScript 代码将 3 个东西作为参数 返回 Promise 的函数 最大尝试次数 每次尝试之间的延迟 我最终做的是使用for环形 我不想使用递归函数 这样 即使有 50 次尝试 调用堆栈也不会长 50 行 这里是打字
  • JPQL和日期比较(查询中的约束)

    我的应用程序模型对象包含一个日期字段 时间戳 Entity Table name MYTABLE public class Application private Date timeStamp 我正在尝试构建一个 JPQL 查询 该查询将选
  • SVN 说我需要执行清理,但清理失败

    这不是重复的问题 因为其他主题中提供的解决方案对我不起作用 当我尝试提交时 错误 工作副本 D Webs Drupal 6 已锁定错误 请执行 清理 命令 当我尝试进行清理时 清理无法处理以下路径 D Webs Drupal 6 有谁知道我
  • 如何在 Jinja2 模板中检查 2 个日期之间的差异是否 > 或 < 1 个月?

    我正在使用 jinja2 模板 带有 Ansible 在其中我需要检查两个日期之间的差异 我没有日期的纪元 但我有 yyy mm dd HH MM ss 格式 没有毫秒 所以我的问题是 1 jinja2中有没有办法比较两个日期 我不想安装任
  • `multirust` 在哪里安装 Rust 语言源代码?

    我安装了multirustRust 编程语言的版本 我试图配置racer代码完成包通过以下方式指向 Rust 源代码RUST SRC PATH环境变量 但是 我似乎找不到 Rust 源文件的位置 当我打字时which rustc我被指出 u
  • 无法在 Android 项目中导入 Google Cloud Endpoints 客户端库类

    我无法让 Google Cloud Endpoints 正常工作 我有一个在 GAE 上运行的 Python 端点项目 并且使用 api 资源管理器可以完美运行 然而 我正在努力正确生成客户端库并在我的 Android 应用程序中使用它 我
  • 如何格式化 Opera 浏览器的输入占位符文本?

    我使用下面的伪元素和伪类使用 CSS 设置了占位符文本的样式 这可以在除 Opera 之外的所有主要浏览器上完成工作 我的理解是 Opera 不支持占位符文本样式 有谁知道如何设计 Opera 输入占位符文本的样式 CSS webkit i
  • Sequelize:销毁/删除表中的所有记录

    我正在使用 Mocha 进行单元测试 当测试开始时 我想删除表中所有以前的记录 我尝试过的 db User destroy force true then gt then gt done db User destroy where unde
  • R 如何在将 csv 文件写入磁盘之前估计其大小

    R 有什么方法可以在实际将 csv 文件写入磁盘之前估计其文件大小write csv or readr write csv 如果用户不小心尝试在函数中将大文件写入磁盘 我想实现警告 数据帧的内存占用之间似乎存在某种关系 object siz
  • 加载 R 包时如何分配可用的变量?

    我已经弄清楚如何制作一个包含一些我经常使用的调色板的包 我修改了代码this https drsimonj svbtle com creating corporate colour palettes for ggplot2博客文章以使其发挥
  • 在程序集中写入文件时出现问题

    我正在尝试用汇编语言编写一个简单的程序 在其中打开一个现有文件并在其中写入一条消息 这是我在数据段中定义的消息 当我想写入文件时会出现问题 在我尝试写入后 AX 寄存器将包含 5 诺顿专家指南称这是 拒绝访问 错误代码 关于我做错了什么有什
  • IronPython db-api 2.0

    有谁知道哪些 db api 2 0 驱动程序可以与 IronPython 配合使用 如果是这样 有人尝试过将它与 SQLAlchemy SQLObject 或 Django ORM 一起使用吗 我知道这是一个很晚的答案 但我今天才看到这个问
  • 如果请求参数不是 Spring MVC 中的 bean,如何验证请求参数?

    下面是我的 Spring MVC REST 服务中的 POST 端点 我想使用 spring 验证框架来确保我收到的列表不为空 我该怎么做 我必须向周围提供包装豆吗listOfLongs RequestMapping value some
  • 使用神经网络进行异或 (Matlab)

    所以 我希望这是我正在做的一件真正愚蠢的事情 并且有一个简单的答案 我正在尝试训练 2x3x1 神经网络来解决 XOR 问题 它不起作用 所以我决定深入了解发生了什么 最后 我决定自己分配权重 这是我想出的权重向量 theta1 11 0
  • 在 mac M1 芯片上构建 docker amd64 镜像

    我正在尝试以两种方式在我的 mac M1 arm64 上构建 dockerfile 下面是 dockerfile 的重要部分 FROM erlang 24 elixir expects utf8 ENV ELIXIR VERSION v1