无法使用新 Mac M1 构建 Docker 映像
Unable to build Docker image using new Mac M1
我正在尝试构建一个 Docker 图像供我的应用程序在集成测试中使用。
图像可以在我的 2017 年旧 Macbook 上正常构建,但在我使用 M1 芯片的新 Macbook 上尝试时失败。
我收到的错误是:
unable to build image:
The command '/bin/sh -c make build' returned a non-zero code: 2
{"version": "TEST", "output": "Step 1/9 : FROM golang:1.15.3-alpine3.12 AS builder---> 9701aa6ab80a
Step 2/9 : RUN apk update && apk add gcc make git libc-dev ---> Using cache ---> 87ff8d250e2d
Step 3/9 : ADD ./ /src/ ---> Using cache ---> ef95bb030ff7
Step 4/9 : WORKDIR /src/ ---> Using cache\n ---> 3b982c9ab004
Step 5/9 : RUN make build ---> Running in f7596e65a80b\u001b[91m# github.com/qadre/huski.go\n/usr/local/go/pkg/tool/linux_arm64/link: running gcc failed: exit status 1
collect2: fatal error: cannot find 'ld'\ncompilation terminated.\n\n\u001b[0m\u001b[91
mmake: *** [Makefile:8: build] Error 2\n\u001b[0mRemoving intermediate container f7596e65a80b\n"}
我的构建是
build:
@go build -race -o huski-go -ldflags="-X 'main.Version=${VERSION}'"
当我 运行 ld -v 我得到:
@(#)PROGRAM:ld PROJECT:ld64-609.8 BUILD 15:07:46 Dec 18 2020
configured to support archs: armv6 armv7 armv7s arm64 arm64e arm64_32
i386 x86_64 x86_64h armv6m armv7k armv7m armv7em LTO support using:
LLVM version 12.0.0, (clang-1200.0.32.29) (static support for 27,
runtime is 27) TAPI support using: Apple TAPI version 12.0.0
(tapi-1200.0.23.5)
有人在使用新 Macbook 时遇到过这个问题吗?
经过一些调查,我发现这似乎是在我的 Go 应用程序中使用 Alpine 容器时出现的问题。为了解决这个问题,我必须在我的 Dockerfile 中添加 binutils-gold
依赖项。
我的 Dockerfile 现在如下所示并已解决问题:
FROM golang:1.15.3-alpine3.12 AS builder
RUN apk update && apk add gcc make git libc-dev binutils-gold
ADD ./ /src/
WORKDIR /src/
RUN make build
FROM alpine:3.12
COPY --from=builder /src/static /app/static
COPY --from=builder /src/huski-go /app/
ENTRYPOINT ["/app/huski-go"]
您可以阅读更多相关信息,我在这里找到了答案:https://github.com/nodejs/node/issues/4212
你应该这样构建:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build ...
此命令允许您在 arm 中构建 x86 映像
我正在尝试构建一个 Docker 图像供我的应用程序在集成测试中使用。
图像可以在我的 2017 年旧 Macbook 上正常构建,但在我使用 M1 芯片的新 Macbook 上尝试时失败。
我收到的错误是:
unable to build image:
The command '/bin/sh -c make build' returned a non-zero code: 2
{"version": "TEST", "output": "Step 1/9 : FROM golang:1.15.3-alpine3.12 AS builder---> 9701aa6ab80a
Step 2/9 : RUN apk update && apk add gcc make git libc-dev ---> Using cache ---> 87ff8d250e2d
Step 3/9 : ADD ./ /src/ ---> Using cache ---> ef95bb030ff7
Step 4/9 : WORKDIR /src/ ---> Using cache\n ---> 3b982c9ab004
Step 5/9 : RUN make build ---> Running in f7596e65a80b\u001b[91m# github.com/qadre/huski.go\n/usr/local/go/pkg/tool/linux_arm64/link: running gcc failed: exit status 1
collect2: fatal error: cannot find 'ld'\ncompilation terminated.\n\n\u001b[0m\u001b[91
mmake: *** [Makefile:8: build] Error 2\n\u001b[0mRemoving intermediate container f7596e65a80b\n"}
我的构建是
build: @go build -race -o huski-go -ldflags="-X 'main.Version=${VERSION}'"
当我 运行 ld -v 我得到:
@(#)PROGRAM:ld PROJECT:ld64-609.8 BUILD 15:07:46 Dec 18 2020 configured to support archs: armv6 armv7 armv7s arm64 arm64e arm64_32 i386 x86_64 x86_64h armv6m armv7k armv7m armv7em LTO support using: LLVM version 12.0.0, (clang-1200.0.32.29) (static support for 27, runtime is 27) TAPI support using: Apple TAPI version 12.0.0 (tapi-1200.0.23.5)
有人在使用新 Macbook 时遇到过这个问题吗?
经过一些调查,我发现这似乎是在我的 Go 应用程序中使用 Alpine 容器时出现的问题。为了解决这个问题,我必须在我的 Dockerfile 中添加 binutils-gold
依赖项。
我的 Dockerfile 现在如下所示并已解决问题:
FROM golang:1.15.3-alpine3.12 AS builder
RUN apk update && apk add gcc make git libc-dev binutils-gold
ADD ./ /src/
WORKDIR /src/
RUN make build
FROM alpine:3.12
COPY --from=builder /src/static /app/static
COPY --from=builder /src/huski-go /app/
ENTRYPOINT ["/app/huski-go"]
您可以阅读更多相关信息,我在这里找到了答案:https://github.com/nodejs/node/issues/4212
你应该这样构建:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build ...
此命令允许您在 arm 中构建 x86 映像