关键词:
【中文标题】在 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的方法。但到了苹果... 查看详情