Docker: standard_init_linux.go:211: o processo do usuário exec causou “erro de formato exec”

Sep 02 2020

Eu criei uma imagem multiarch do docker com o comando 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}

No dockerhub as imagens vieram com o diff arch :

Mas quando eu o executei em clusters de braço, ele está mostrando erro:

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

Versão do Docker no cluster 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:  

Alguém pode ajudar nisso?

Respostas

2 KonradBotor Sep 02 2020 at 04:05

A compilação multiarch do Docker não é o problema. O problema é que /usr/local/bin/chaos-operatoré um binário linux/amd64 e você está tentando executá-lo em linux/arm64.