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

     2023-02-18     240

关键词:

【中文标题】在 mac M1 芯片上构建 docker amd64 镜像【英文标题】:Building docker amd64 images on mac M1 chip 【发布时间】:2021-10-19 04:44:24 【问题描述】:

我正在尝试以两种方式在我的 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

.
.
.
    使用docker build -t test .

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

> [ 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
    使用docker buildx build --platform linux/amd64 -t test .

这应该可以解决我的不兼容问题并使用 qemu 模拟器构建映像。但我得到的与elixir (1. part of the 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 机器上构建得很好。

以下是我发现但对我没有多大帮助的相关问题:1. way of building 2. way of building

我希望我已经提供了足够的信息,如果不问我 - 谢谢你的帮助。

【问题讨论】:

【参考方案1】:

我建议你使用 erlang:23 - 因为 erlang:24 添加了 JIT 并且 qemu 非常不喜欢它。替代方案 - 查找 erlang:24 禁用 JIT 的版本

【讨论】:

【参考方案2】:

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

使用 UTM (https://mac.getutm.app/) 运行 amd64 linux; 使用该 VM 作为 docker 主机进行构建;

【讨论】:

苹果硅 M1 + 泊坞窗

...:我有一个dockerfile和docker-compose可以在基于Intel和/或AMD的芯片上正常运行,但是当它预期构建在M1AppleSilicon芯片上时会出现一些问题。它遵循错误:#612.11读取状态信息...#612.16E:无法找到包msodbcsql17#612.16E:无法找到包 查看详情

Flutter 项目无法在 Mac M1 上构建

...间】:2021-06-1003:46:57【问题描述】:我最近购买了带有M1芯片的新Mac书,在构建时遇到了Flutter和Firebase之间的巨大问题。我会同时列出Flutter错误日志和Xcode错误日志。注意:我正在Flutter频道Master上构建Flutter错误日志:Launchingli 查看详情

docker在m1macarm64架构上构建amd64镜像。(代码片段)

问题描述:通过在MacM1电脑上构建的镜像,在linuxx86的服务器上运行不起来,因为编译原理不一样。构建好的镜像ID,通过dockerinspect命令可以查看镜像的架构;如下,同样的服务,构建出来的镜像架构确... 查看详情

【M1芯片Mac】Nuxt构建太慢

】【M1芯片Mac】Nuxt构建太慢【英文标题】:【M1chipMac】Nuxtbuildistooslow【发布时间】:2021-11-0211:48:10【问题描述】:我正在我的新M1芯片机器(Mac)上为Nuxt项目开发环境。问题是Nuxt项目的构建速度太慢了。我将nodeenv安装到我的项目... 查看详情

如何在 M1 Mac 上运行 querydsl 项目测试?

...erydsl/querydsl)上运行querydsl项目的测试套件。按照说明进行构建(我使用“所有”配置文件构建)后,我安装了Docker和docker-compo 查看详情

在arm架构的mac上安装sqlserver(m1芯片orm2芯片)(代码片段)

在arm架构的mac上安装sqlserver由于Mac最新的芯片使用了arm架构的缘故Sqlserver和Mac的兼容相当差,以至于无法在Mac的docker上启动在m1芯片上很多方法试试还是可以的但是m2就几乎行不通了尝试了很多命令,无果,最终还是... 查看详情

Docker 构建 - mmap() 失败:[12] 无法分配内存(使用 Apple M1 芯片)

】Docker构建-mmap()失败:[12]无法分配内存(使用AppleM1芯片)【英文标题】:Dockerbuild-mmap()failed:[12]Cannotallocatememory(UsingAppleM1chip)【发布时间】:2021-10-0612:20:06【问题描述】:我在尝试构建docker映像时遇到以下错误(我使用的是苹... 查看详情

无法在 M1 Mac 上使用 Docker 安装Sharp

】无法在M1Mac上使用Docker安装Sharp【英文标题】:CannotinstallsharpwithDockeronM1Mac【发布时间】:2021-11-0121:29:20【问题描述】:在M1Mac上使用yarninstall安装sharp是可以的,但使用Docker会导致以下错误:error/usr/src/app/node_modules/sharp:Commandfail... 查看详情

如何在 arm64 主机平台上运行 amd64 docker 镜像

】如何在arm64主机平台上运行amd64docker镜像【英文标题】:howtorunamd64dockerimagesonarm64hostplatform【发布时间】:2021-07-3103:49:35【问题描述】:我有一个m1mac,我正在尝试在基于arm64的主机平台上运行一个基于amd64的docker映像。但是,当... 查看详情

无法在 MacBook M1 芯片上构建 Kotlin Multiplatform 移动项目

】无法在MacBookM1芯片上构建KotlinMultiplatform移动项目【英文标题】:UnabletobuildKotlinMultiplatformmobileprojectonMacBookM1chip【发布时间】:2021-08-2903:16:10【问题描述】:我无法为iOS应用程序构建KMM项目。我正在关注KMMgetstarted。我有以下设... 查看详情

如何使用 M1 芯片在我的 Mac 上运行 pyqt5

】如何使用M1芯片在我的Mac上运行pyqt5【英文标题】:Howcanirunpyqt5onmymacwithM1chip【发布时间】:2021-04-3005:25:34【问题描述】:现在。当我运行它时。错误导致ImportError:dlopen(/Users/v/Library/Python/3.8/lib/python/site-packages/PyQt5/QtWidgets.abi3.so,... 查看详情

在 Mac OSX 上构建的 Docker 映像无法在 AWS EC2 实例上运行

】在MacOSX上构建的Docker映像无法在AWSEC2实例上运行【英文标题】:DockerImagebuiltonMacOSXwon\'trunonAWSEC2instance【发布时间】:2021-05-0216:11:17【问题描述】:基于MacOSX和M1处理器构建的映像,部署到EC2实例。但是当脚本运行时会产生错误... 查看详情

在 Mac M1 上 React Native ios 构建失败

】在MacM1上ReactNativeios构建失败【英文标题】:ReactNativeiosbuiledFailedonMacM1【发布时间】:2021-12-1123:48:13【问题描述】:我创建了React项目版本0.66.1。它在Android上运行良好,但在ios上运行良好。**构建失败**以下构建命令失败:Compile... 查看详情

如何在 mac M1(Apple 芯片)上使用 google_sign_in api 进行开发

】如何在macM1(Apple芯片)上使用google_sign_inapi进行开发【英文标题】:howtodevelopusinggoogle_sign_inapionmacM1(Applesilicon)【发布时间】:2021-11-0300:27:33【问题描述】:我最近开始在M1mac上使用颤振开发一个项目,我所有的依赖项都可以正... 查看详情

在具有 M1 芯片(基于 ARM 的 Apple Silicon)的 Mac 上安装较早版本的 Python(3.8 之前)失败

】在具有M1芯片(基于ARM的AppleSilicon)的Mac上安装较早版本的Python(3.8之前)失败【英文标题】:InstallationofearlierversionsofPython(priorto3.8)failsonMacwithM1Chip(ARMbasedAppleSilicon)【发布时间】:2021-04-1514:31:14【问题描述】:我有带有AppleM1... 查看详情

Docker-compose 在 M1 mac 上的 VM (Parallels) 中

】Docker-compose在M1mac上的VM(Parallels)中【英文标题】:Docker-composeinaVM(Parallels)onaM1mac【发布时间】:2021-08-1519:19:05【问题描述】:目前我正在尝试让docker-compose在我的带有M1处理器的Mac上的VM(Ubuntu20.04)中运行。我已经通过curl在我... 查看详情

在 Mac M1 上构建 Dockerfile 成功,在 Windows 10 WSL 2 上失败

】在MacM1上构建Dockerfile成功,在Windows10WSL2上失败【英文标题】:BuilidingDockerfilesucceedonMacM1,failsonWindows10WSL2【发布时间】:2021-12-2607:12:33【问题描述】:将我过去做的应用程序容器化后,我开始在我的MacM1上工作并创建了以下Docker... 查看详情

在m1芯片上跑原生linux:编译速度比macos还快40%,真香警告

...tAI现在,M1Mac可以顺利运行原生Linux了。专为苹果自研芯片打造的AsahiLinux项目,Alpha版本已经释出。在Mac采用英特尔CPU的时期,用户已经摸索出通过硬盘分区或者使用Parallels等虚拟机在Mac上安装Linux的方法。但到了苹果... 查看详情