Docker: standard_init_linux.go: 211: proces użytkownika exec spowodował „błąd formatu exec”

Sep 02 2020

Utworzyłem jeden obraz multiarchowy dockera za pomocą polecenia buildx.

sudo docker buildx build -f build/Dockerfile --platform linux/arm/v7,linux/arm64,linux/amd64 -t uditgaurav/chaos-operator:v3 . --push

build / Dockerfile:

FROM golang:1.13 

ENV GO111MODULE=on \
    CGO_ENABLED=1 

ENV OPERATOR=/usr/local/bin/chaos-operator \
    USER_UID=1001 \
    USER_NAME=chaos-operator

# install operator binary
COPY build/_output/bin/chaos-operator ${OPERATOR} COPY build/bin /usr/local/bin RUN /usr/local/bin/user_setup RUN export GOOS=$(echo ${TARGETPLATFORM} | cut -d / -f1) && \ export GOARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) && \ GOARM=$(echo ${TARGETPLATFORM} | cut -d / -f3 | cut -c2-) ENTRYPOINT ["/usr/local/bin/entrypoint"] USER ${USER_UID}

W dockerhub obrazy były dostarczane z łukiem różnicowym :

Ale kiedy uruchomiłem go w klastrach ramion, pokazuje błąd:

standard_init_linux.go:211: exec user process caused "exec format error"

Wersja platformy Docker w klastrze ARM

Client:
 Version:           19.03.6
 API version:       1.40
 Go version:        go1.12.17
 Git commit:        369ce74a3c
 Built:             Fri Feb 28 23:47:53 2020
 OS/Arch:           linux/arm64
 Experimental:      false

Server:
 Engine:
  Version:          19.03.6
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.17
  Git commit:       369ce74a3c
  Built:            Wed Feb 19 01:06:16 2020
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.3.3-0ubuntu1~18.04.2
  GitCommit:        
 runc:
  Version:          spec: 1.0.1-dev
  GitCommit:        
 docker-init:
  Version:          0.18.0
  GitCommit:  

czy ktoś może w tym pomóc?

Odpowiedzi

2 KonradBotor Sep 02 2020 at 04:05

Kompilacja multiarch Dockera nie stanowi problemu. Problem polega na tym, że /usr/local/bin/chaos-operatorjest to plik binarny linux / amd64 i próbujesz go uruchomić na linux / arm64.