Impossible d'exécuter le fichier binaire GO dans les conteneurs Docker avec Linux Runner


user660232:

Go et les binaires faisaient partie de notre image de docker.

J'ai essayé toutes les combinaisons possibles pour construire Go binary

export GOARCH=386 && export GOOS=linux && go build ./cmd/status
export GOARCH=amd64 && export GOOS=windows && go build ./cmd/status

$ uname -a
 Linux runner-4KP_No95-project-35871-concurrent-0 44.44.444-115.233.amzn1.x86_64 #1 SMP Thu Feb 27 23:49:15 UTC 2020 x86_64 GNU/Linux

Obtenir une erreur comme

/pipeline/status: /pipeline/status: cannot execute binary file

La section d'exemple du fichier docker est -

ARG GOLANG_VERSION=1.14

FROM golang:${GOLANG_VERSION} as build-helpers

ENV GOPRIVATE=code.abcd.com

RUN mkdir -p /pipeline-helpers

ADD /reusable-aspects/ci-caching/golang-preheat-cache  /golang-preheat-cache
RUN cd /golang-preheat-cache && go mod download

ADD helpers/go-pipeline-commands /pipeline-helpers/
RUN cd /pipeline-helpers && CGO_ENABLED=0 GOOS=linux make

FROM alpine

RUN mkdir -p /pipeline
WORKDIR /pipeline
COPY --from=build-helpers /pipeline-helpers/commit .
COPY --from=build-helpers /pipeline-helpers/status .
RUN chmod a+x commit
RUN chmod a+x status

ENTRYPOINT ["./commit"]
CMD []

Les journaux d'image où les binaires Go sont compilés sont ajoutés ci-dessous

[0KRunning with gitlab-runner 11.11.2 (ac2a293c)
[0;m[0K  on aws-build-runner-scheduler 8616255e
[0;msection_start:1590231123:prepare_executor
[0K[0KUsing Docker executor with image gcr.io/kaniko-project/executor:debug ...
[0;m[0KPulling docker image gcr.io/kaniko-project/executor:debug ...
[0;m[0KUsing docker image sha256:adasdasdasdasdasdasdasdsa for gcr.io/kaniko-project/executor:debug ...
[0;msection_end:1590231124:prepare_executor
[0Ksection_start:1590231124:prepare_script
[0KRunning on runner-8616123e-project-12312-concurrent-0 via ip-12-122-122-122...
section_end:1590231125:prepare_script
[0Ksection_start:1590231125:get_sources
[0KReinitialized existing Git repository in /builds/abcde/pipeline/projetname/.git/
[32;1mFetching changes...[0;m
From https://code.abc.com/abcde/pipeline/projetname
 * [new ref]         refs/pipelines/5679048 -> refs/pipelines/5679048
   0286714..043832e  feat/qaPipelineDeploy  -> origin/feat/qaPipelineDeploy
[32;1mChecking out 043832ea as feat/qaPipelineDeploy...[0;m
Removing helpers/bash-commons/src/welcome/version-info-pipeline.txt

[32;1mSkipping Git submodules setup[0;m
section_end:1590231128:get_sources
[0Ksection_start:1590231128:restore_cache
[0Ksection_end:1590231130:restore_cache
[0Ksection_start:1590231130:download_artifacts
[0Ksection_end:1590231132:download_artifacts
[0Ksection_start:1590231132:build_script
[0K[32;1m$ mkdir -p /kaniko/.docker[0;m
[32;1m$ export IMAGE_TAG=${CI_COMMIT_TAG:=$CI_COMMIT_REF_SLUG}[0;m
[32;1m$ imagename=$CI_REGISTRY_IMAGE/helpers:$IMAGE_TAG[0;m
[36mINFO[0m[0001] Resolved base name golang:1.14 to build-helpers 
[36mINFO[0m[0001] Retrieving image manifest golang:1.14        
[36mINFO[0m[0002] Retrieving image manifest golang:1.14        
[36mINFO[0m[0003] Retrieving image manifest alpine             
[36mINFO[0m[0004] Retrieving image manifest alpine             
[36mINFO[0m[0005] Built cross stage deps: map[0:[/pipeline-helpers/commit /pipeline-helpers/status]] 
[36mINFO[0m[0005] Retrieving image manifest golang:1.14        
[36mINFO[0m[0005] Retrieving image manifest golang:1.14        
[36mINFO[0m[0006] Executing 0 build triggers                   
[36mINFO[0m[0006] Unpacking rootfs as cmd RUN mkdir -p /pipeline-helpers requires it. 
[36mINFO[0m[0021] ENV GOPRIVATE=code.abc.com               
[36mINFO[0m[0021] RUN mkdir -p /pipeline-helpers               
[36mINFO[0m[0021] Taking snapshot of full filesystem...        
[36mINFO[0m[0022] Resolving 28120 paths                        
[36mINFO[0m[0025] cmd: /bin/sh                                 
[36mINFO[0m[0025] args: [-c mkdir -p /pipeline-helpers]        
[36mINFO[0m[0025] Running: [/bin/sh -c mkdir -p /pipeline-helpers] 
[36mINFO[0m[0025] Taking snapshot of full filesystem...        
[36mINFO[0m[0025] Resolving 28121 paths                        
[36mINFO[0m[0027] Using files from context: [/builds/abcde/pipeline/projetname/projetname-reusable-aspects/ci-caching/golang-preheat-cache] 
[36mINFO[0m[0027] ADD /projetname-reusable-aspects/ci-caching/golang-preheat-cache  /golang-preheat-cache 
[36mINFO[0m[0027] Resolving 3 paths                            
[36mINFO[0m[0027] Taking snapshot of files...                  
[36mINFO[0m[0027] RUN cd /golang-preheat-cache && go mod download 
[36mINFO[0m[0027] cmd: /bin/sh                                 
[36mINFO[0m[0027] args: [-c cd /golang-preheat-cache && go mod download] 
[36mINFO[0m[0027] Running: [/bin/sh -c cd /golang-preheat-cache && go mod download] 
[36mINFO[0m[0033] Taking snapshot of full filesystem...        
[36mINFO[0m[0033] Resolving 50967 paths                        
[36mINFO[0m[0045] Using files from context: [/builds/abcde/pipeline/projetname/helpers/go-pipeline-commands] 
[36mINFO[0m[0045] ADD helpers/go-pipeline-commands /pipeline-helpers/ 
[36mINFO[0m[0045] Resolving 25 paths                           
[36mINFO[0m[0045] Taking snapshot of files...                  
[36mINFO[0m[0045] RUN cd /pipeline-helpers && CGO_ENABLED=0 GOOS=linux make 
[36mINFO[0m[0045] cmd: /bin/sh                                 
[36mINFO[0m[0045] args: [-c cd /pipeline-helpers && CGO_ENABLED=0 GOOS=linux make] 
[36mINFO[0m[0045] Running: [/bin/sh -c cd /pipeline-helpers && CGO_ENABLED=0 GOOS=linux make] 
[34m > Download dependencies [0m 
[37m > Tidy dependencies [0m 
[34m go mod tidy [0m 
[37m > Building the binary [0m 
[34m go build ./cmd/commit [0m 
[34m go build ./cmd/query-qa-pipeline-status [0m 
[37m > Format code [0m 
[34m go fmt ./... [0m 
[37m > Run unit tests [0m 
[34m go test -run TestUnit ./... [0m 
ok      code.abc.com/abcde/pipeline/projetname/helpers/cmd/commit   0.005s
ok      code.abc.com/abcde/pipeline/projetname/helpers/cmd/status   0.005s
[37m > Find static code issues [0m 
[34m go vet ./... [0m 
[36mINFO[0m[0055] Taking snapshot of full filesystem...        
[36mINFO[0m[0056] Resolving 52425 paths                        
[36mINFO[0m[0061] RUN echo "  Golang version:      `go version`" >> /pipeline-helpers/version-info-pipeline.txt 
[36mINFO[0m[0061] cmd: /bin/sh                                 
[36mINFO[0m[0061] args: [-c echo "  Golang version:      `go version`" >> /pipeline-helpers/version-info-pipeline.txt] 
[36mINFO[0m[0061] Running: [/bin/sh -c echo "  Golang version:      `go version`" >> /pipeline-helpers/version-info-pipeline.txt] 
[36mINFO[0m[0061] Taking snapshot of full filesystem...        
[36mINFO[0m[0065] Resolving 52426 paths                        
[36mINFO[0m[0069] RUN echo "  projetname type:           Helpers" >> /pipeline-helpers/version-info-pipeline.txt 
[36mINFO[0m[0069] cmd: /bin/sh                                 
[36mINFO[0m[0069] args: [-c echo "  projetname type:           Helpers" >> /pipeline-helpers/version-info-pipeline.txt] 
[36mINFO[0m[0069] Running: [/bin/sh -c echo "  projetname type:           Helpers" >> /pipeline-helpers/version-info-pipeline.txt] 
[36mINFO[0m[0069] Taking snapshot of full filesystem...        
[36mINFO[0m[0069] Resolving 52426 paths                        
[36mINFO[0m[0072] RUN echo "  Commit hash:         `echo ${CI_COMMIT_SHA}`" >> /pipeline-helpers/version-info-pipeline.txt 
[36mINFO[0m[0072] cmd: /bin/sh                                 
[36mINFO[0m[0072] args: [-c echo "  Commit hash:         `echo ${CI_COMMIT_SHA}`" >> /pipeline-helpers/version-info-pipeline.txt] 
[36mINFO[0m[0072] Running: [/bin/sh -c echo "  Commit hash:         `echo ${CI_COMMIT_SHA}`" >> /pipeline-helpers/version-info-pipeline.txt] 
[36mINFO[0m[0072] Taking snapshot of full filesystem...        
[36mINFO[0m[0072] Resolving 52426 paths                        
[36mINFO[0m[0076] Saving file pipeline-helpers/commit for later use 
[36mINFO[0m[0076] Saving file pipeline-helpers/version-info-pipeline.txt for later use 
[36mINFO[0m[0076] Saving file pipeline-helpers/status for later use 
[36mINFO[0m[0076] Deleting filesystem...                       
[36mINFO[0m[0077] Retrieving image manifest alpine             
[36mINFO[0m[0079] Retrieving image manifest alpine             
[36mINFO[0m[0080] Executing 0 build triggers                   
[36mINFO[0m[0080] Unpacking rootfs as cmd RUN mkdir -p /pipeline requires it. 
[36mINFO[0m[0080] RUN mkdir -p /pipeline                       
[36mINFO[0m[0080] Taking snapshot of full filesystem...        
[36mINFO[0m[0080] Resolving 482 paths                          
[36mINFO[0m[0080] cmd: /bin/sh                                 
[36mINFO[0m[0080] args: [-c mkdir -p /pipeline]                
[36mINFO[0m[0080] Running: [/bin/sh -c mkdir -p /pipeline]     
[36mINFO[0m[0080] Taking snapshot of full filesystem...        
[36mINFO[0m[0080] Resolving 483 paths                          
[36mINFO[0m[0080] WORKDIR /pipeline                            
[36mINFO[0m[0080] cmd: workdir                                 
[36mINFO[0m[0080] Changed working directory to /pipeline       
[36mINFO[0m[0080] COPY --from=build-helpers /pipeline-helpers/commit . 
[36mINFO[0m[0080] Resolving 1 paths                            
[36mINFO[0m[0080] Taking snapshot of files...                  
[36mINFO[0m[0080] Resolving 1 paths                            
[36mINFO[0m[0080] Taking snapshot of files...                  
[36mINFO[0m[0081] Resolving 1 paths                            
[36mINFO[0m[0081] Taking snapshot of files...                  
[36mINFO[0m[0081] COPY --from=build-helpers /pipeline-helpers/status . 
[36mINFO[0m[0081] Resolving 1 paths                            
[36mINFO[0m[0081] Taking snapshot of files...                  
[36mINFO[0m[0081] RUN chmod a+x commit                    
[36mINFO[0m[0081] cmd: /bin/sh                                 
[36mINFO[0m[0081] args: [-c chmod a+x commit]             
[36mINFO[0m[0081] Running: [/bin/sh -c chmod a+x commit]  
[36mINFO[0m[0081] Taking snapshot of full filesystem...        
[36mINFO[0m[0081] Resolving 487 paths                          
[36mINFO[0m[0081] No files were changed, appending empty layer to config. No layer added to image. 
[36mINFO[0m[0081] cmd: /bin/sh                                 
[36mINFO[0m[0081] Taking snapshot of full filesystem...        
[36mINFO[0m[0081] Resolving 487 paths                          
[36mINFO[0m[0081] No files were changed, appending empty layer to config. No layer added to image. 
[36mINFO[0m[0081] RUN chmod a+x status       
[36mINFO[0m[0081] cmd: /bin/sh                                 
[36mINFO[0m[0081] args: [-c chmod a+x status] 
[36mINFO[0m[0081] Running: [/bin/sh -c chmod a+x status] 
[36mINFO[0m[0081] Taking snapshot of full filesystem...        
[36mINFO[0m[0081] Resolving 487 paths                          
[36mINFO[0m[0081] No files were changed, appending empty layer to config. No layer added to image. 
[36mINFO[0m[0081] CMD []                                       
[32;1m$ echo projetname_IMAGE_TAG=${IMAGE_TAG}[0;m
projetname_IMAGE_TAG=feat-qapipelinedeploy
section_end:1590231218:build_script
[0Ksection_start:1590231218:after_script
[0Ksection_end:1590231219:after_script
[0Ksection_start:1590231219:archive_cache
[0Ksection_end:1590231220:archive_cache
[0Ksection_start:1590231220:upload_artifacts_on_success
[0Ksection_end:1590231222:upload_artifacts_on_success
[0K[32;1mJob succeeded

À partir du fichier Docker GIT.YML, j'appelle la bash ./statuscommande. Il jette une erreur car ne peut pas exécuter le fichier bianry

Il existe un autre fichier docker qui est construit à une étape différente après que l'image docker ci-dessus est générée. Cette image docker est utilisée pour les tests dans le fichier YML.

RG GO_VERSION=1.14
# Install OpenAPI Validator
FROM golang:${GO_VERSION} AS openapivalidatorbuilder
WORKDIR /work
ENV GOPRIVATE=code.abcd.com
COPY /reusable-aspects/enforcement/open-api-check/  .
RUN go build .

ARG PIPELINE_HELPER=docker.abcd.com/projectName/pipeline/projects/helpers:master
FROM ${PIPELINE_HELPER} as helper

FROM golang:${GO_VERSION}

ENV GOPRIVATE=code.abcd.com

ADD /reusable-aspects/ci-caching/golang-preheat-cache  /golang-preheat-cache
RUN cd /golang-preheat-cache && go mod download

RUN curl -L https://github.com/a8m/envsubst/releases/download/v1.1.0/envsubst-`uname -s`-`uname -m` -o envsubst

RUN apt-get update \
    && apt-get install -y --no-install-recommends \
    nodejs \
    npm \
    unzip

RUN npm --version
RUN npm install -g \
    [email protected] \
    [email protected]

RUN apt-get install -y \
    # Install ruby and CFN_NAG
    ruby-dev \
    ruby-json \
    ruby \
    ruby-bundler \
    # Install AWS CLI
    awscli \
    jq \
    figlet

RUN rm -rf /var/cache/apk/*

RUN gem install cfn-nag --no-rdoc --no-ri

RUN mkdir /pipeline

ADD helpers/bash-commons/src/welcome /pipeline

RUN echo "  Golang version:               `go version`" >> /pipeline/version-info-pipeline.txt
RUN echo "  Node version:                 `node -v`" >> /pipeline/version-info-pipeline.txt
RUN echo "  Serverless version:           `serverless -v`" >> /pipeline/version-info-pipeline.txt
RUN echo "  projects type:                    Information Serverless Golang" >> /pipeline/version-info-pipeline.txt

COPY --from=openapivalidatorbuilder /work/open-api-check /pipeline/open-api-check
RUN chmod a+x /pipeline/open-api-check

COPY --from=helper /pipeline/hash /pipeline
COPY --from=helper /pipeline/status /pipeline
Tranvu Xuannhat:

golang:1.14n'est pas une alpinebase mais une debianbase. Donc, bien sûr, vous ne pouvez pas exécuter le binaire de compilation Debian en image alpine.

Essayez de remplacer

FROM golang:${GOLANG_VERSION} as build-helpers

avec

FROM golang:${GOLANG_VERSION}-alpine as build-helpers

et ajoutez les lignes suivantes pour télécharger la bibliothèque nécessaire à la construction du binaire

RUN apk update && \
  apk --update upgrade && \
  apk add --no-cache ca-certificates gcc musl-dev git && \
  update-ca-certificates && \
  rm -rf /var/cache/apk/*

METTRE À JOUR

Ajoutez make et mettez la mise à jour apk et ajoutez juste sous FROM golang:...

FROM golang:${GOLANG_VERSION}-alpine as build-helpers

RUN apk update && \
  apk --update upgrade && \
  apk add --no-cache ca-certificates gcc musl-dev git make && \
  update-ca-certificates && \
  rm -rf /var/cache/apk/*

MISE À JOUR APRÈS UNE QUESTION DE MISE À JOUR OP

Étant donné que vous copiez le alpinebinaire d'état de construction de helpervers votre image finale avec base golang:${VERSION}, qui est l' debianenvironnement, bien sûr, il ne peut pas fonctionner.

Je vous recommande de n'utiliser qu'un seul environnement ( alpineou debian) pour toutes les étapes de construction ou l'image finale du docker.

Le premier état de construction de votre première image docker devrait donc être

FROM golang:${GOLANG_VERSION}

et l'image finale s'il vous plaît utiliser debianau lieu de alpin

FROM debian

Articles connexes


Docker: impossible d'exécuter le fichier binaire

Misiur Je ne peux exécuter aucun binaire dans mon conteneur Docker. Dockerfile: FROM ubuntu:eoan AS compiler-build RUN apt-get update && \ dpkg --add-architecture i386 && \ apt-get install -y gcc \ gcc-multilib \

bash: ./eclipse: impossible d'exécuter le fichier binaire

KItis: je travaille sur le système d'exploitation Ubuntu10.10 et j'ai téléchargé eclipse-jee-helios-SR1-linux-gtk-x86_64.tar.gz. mon ordinateur est une machine 64 bits. quand je décompresse eclipse et que j'essaie d'exécuter à ./eclipsepartir de la ligne de co