[英]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.