簡體   English   中英

docker 在 macOS m1 和 linux x86 上運行“exec 格式錯誤”

[英]docker run "exec format error" on macOS m1 and linux x86

我正在嘗試在 Docker 中構建和運行一個相當簡單的 Go 應用程序。 本地構建和開發環境是帶有 m1 處理器的 Mac,目標運行環境是 AWS ECS Linux x86_64。

Docker 構建命令運行干凈,但是在嘗試運行容器時,無論各種 go 構建和 docker 構建通用和平台特定選項如何,我都無法通過exec format error

Dockerfile:

# syntax=docker/dockerfile:1

## Build
FROM golang:1.16-buster AS build

LABEL Author="Adam Gantt (adam@adamgantt.com)"

ENV APPPATH=api/src
WORKDIR /app


COPY ${APPPATH}/go.mod ./
COPY ${APPPATH}/go.sum ./
COPY ${APPPATH}/*.go ./

RUN go mod download
RUN go get .

# Generic build
RUN go build -o /docker-api_gateway

# Build for Mac m1
# RUN GOOS=darwin GOARCH=arm64 go build -o /docker-api_gateway
# Build for Windows
# RUN GOOS=windows GOARCH=amd64 go build -o /docker-api_gateway

# Add the required env file to the distro
COPY ${APPPATH}/.env /docker-api_gateway

RUN chmod 777 /docker-api_gateway

## Deploy
FROM gcr.io/distroless/base-debian10

WORKDIR /

COPY --from=build /docker-api_gateway /docker-api_gateway

EXPOSE 9001

USER nonroot:nonroot

ENTRYPOINT ["/docker-api_gateway"]

請注意,我有幾個特定於平台的RUN go build命令,我一直在測試但沒有成功

我更喜歡使用以下命令構建映像:

$ docker build -t crm-plus-api-gateway:latest -f ./api/Dockerfile .

在我的 Mac 上,我使用了以下命令:

$ docker build --platform linux/arm64/v8 -t crm-plus-api-gateway:latest -f ./api/Dockerfile .

我還有一台 Windows 筆記本電腦用於測試並具有特定於平台的版本,但無論我在 Dockerfile 或 Z05B6053C41A2130AFD6FC3B158BDA4E 中切換哪個切換,我都會繼續收到exec format error

我在這個網站和谷歌上花費的時間比我願意承認的要多,試圖找到故障排除技巧,所以就讓這個容器運行的其他建議尋求幫助。

GO 應用程序是沒有私有模塊的單個模塊,並且在我的本地計算機上成功運行。

GO 應用程序的文件結構:

root
  |> api
     |> src
        |.env
        |go.mod
        |go.sum
        |main.go

在繼續將映像推送到 AWS 之前,我希望在我的本地環境(Mac 和 Windows)上成功運行容器。

這是用.env文件覆蓋你的二進制docker-api_gateway

COPY ${APPPATH}/.env /docker-api_gateway

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM