Gitlab 运行程序错误可执行文件:"sh":在$PATH中找不到可执行文件



在Gitlab CI上运行容器时出现此错误

ERROR: Job failed (system failure): Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "sh": executable file not found in $PATH: unknown (exec.go:57:0s)

我.Dockerfile

FROM golang:1.16-alpine AS builder
ENV 
OUTDIR='/out' 
GO111MODULE='on'    
WORKDIR /app
COPY go.mod /app/
COPY go.sum /app/
RUN go mod download
COPY . /app/
RUN CGO_ENABLED=0 GOBIN=${OUTDIR}/usr/bin/ go install .
FROM scratch
COPY --from=builder /out/ /
ENTRYPOINT ["/usr/bin/app-cli"]

我.gitlab-ci.yml

stages:
- validation
validation:
image:
name: gitlab.mycompany.net:4567/myteam/app-cli:latest
entrypoint: [""]
stage: validation
rules:
- if: '$CI_MERGE_REQUEST_IID'
script:
- ls

这个错误与我的dockerfile或gitlab ci有关吗?

我可以在本地运行docker run --rm -ti gitlab.mycompany.net:4567/myteam/app-cli:latest但不是在gitlab runner

Giving an empty entrypointnot giving the entrypoint at all不是一回事。

docker run命令中,您没有给出任何入口点。因此,docker映像以默认入口点ENTRYPOINT ["/usr/bin/app-cli"]运行。

gitlab-ci中,您将使用一个空的entrypoint: [""]覆盖默认入口点,其中executable file not found.

试试这个:

validation:
image:
name: gitlab.mycompany.net:4567/myteam/app-cli:latest
entrypoint: ["/usr/bin/app-cli"]

除了已经指出的覆盖入口点之外,问题是您正在调用ls作为需要shell的脚本。试着在脚本部分调用您的应用程序/usr/bin/app-cli

找到了答案

我只需要改变FROM scratchFROM alpine:latest现在我可以使用sh

相关内容

  • 没有找到相关文章