我试图建立一个dockerfile在我的mac M1 (arm64)在两种方式(以下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组成部分)图像。我得到这个错误:
> [ 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模拟器构建映像。但我得到的与长生不老药(1)有关。(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机器上构建得很好。
以下是我发现的相关问题,但对我没有多大帮助:
构建方式
2。构建方式
我希望我提供了足够的信息,如果没有问我-谢谢帮助。
我尝试了在m1上构建amd64 docker映像的不同方法,并找到最稳定的方法是:
- 使用UTM运行amd64 linux (https://mac.getutm.app/); 使用该VM作为docker主机来构建;
我建议您使用erlang:23 -因为erlang:24添加了JIT, qemu非常不喜欢它。替代-查找erlang:24版本禁用JIT