gpt4 book ai didi

docker - 无法在具有 Linux Runner 的 Docker 容器中执行 GO 二进制文件

转载 作者:行者123 更新时间:2023-12-01 21:13:42 24 4
gpt4 key购买 nike

Go 和二进制文件是我们 docker 镜像的一部分。

我尝试了所有可能的组合来构建 Go 二进制文件

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

得到错误为
/pipeline/status: /pipeline/status: cannot execute binary file

来自 docker 文件的示例部分是 -
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 []

下面添加了构建 Go 二进制文件的图像日志
[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

从 Docker GIT.YML 文件中,我正在调用 bash ./status命令。由于无法执行二进制文件而引发错误

在构建上述 docker 镜像之后,还有一个 docker 文件在不同的阶段构建。此 docker 镜像用于在 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 \
npm@6.11 \
serverless@1.51

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

最佳答案

golang:1.14不是 alpine基础但 debian根据。因此,您当然不能在 alpine 镜像中运行 debian 构建二进制文件。

尝试更换
FROM golang:${GOLANG_VERSION} as build-helpers

FROM golang:${GOLANG_VERSION}-alpine as build-helpers
并添加以下行以下载构建二进制文件所需的库

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

更新

添加 make 并将 apk 更新并添加到 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/*


OP 更新后更新问题

由于您正在复制 alpinehelper 构建状态二进制文件以 golang:${VERSION} 为基础的最终图像,即 debian环境,当然不能运行。

我建议您对所有构建阶段或最终 docker 镜像仅使用一种环境( alpinedebian)。

所以你第一个 docker 镜像的第一个构建状态应该是
FROM golang:${GOLANG_VERSION}

最终图像请使用 debian而不是 Alpine
FROM debian

关于docker - 无法在具有 Linux Runner 的 Docker 容器中执行 GO 二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61970867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com