开发者问题收集

Gitlab Runner 错误 exec:“sh”: 在 $PATH 中未找到可执行文件

2021-08-09
5400

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

错误:作业失败(系统故障):守护进程的错误响应:OCI 运行时创建失败:container_linux.go:380:启动容器进程导致:exec:“sh”:在 $PATH 中找不到可执行文件:未知(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 上运行

3个回答

给出一个空的入口点根本不给出入口点 不是一回事。

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

gitlab-ci 中,您正在用一个空的入口点 entrypoint: [""] 覆盖默认入口点,其中 未找到可执行文件

试试这个:

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

除了如前所述覆盖入口点之外,问题在于您正在调用 ls 作为需要 shell 的脚本。 尝试在脚本部分 /usr/bin/app-cli 中调用您的应用程序。

izolight
2021-08-09

找到答案了

我只需要将 FROM scratch 更改为 FROM alpine:latest 这样现在我就可以使用 sh

Roy
2021-08-09