【问题标题】:Gitlab Runner error exec: "sh": executable file not found in $PATHGitlab Runner错误执行:“sh”:$PATH中找不到可执行文件
【发布时间】:2021-08-09 06:23:12
【问题描述】:

在 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

【问题讨论】:

    标签: docker go dockerfile gitlab-ci gitlab-ci-runner


    【解决方案1】:

    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"]
    

    【讨论】:

    • 我试过了,它返回这个错误Error: unknown command "sh" for "app-cli"
    • @Roy,该规则可能是在容器中评估的,因此需要一个 shell(这显然不存在于从头开始)。输出剩余的参数进行验证。
    • “输出剩余的参数来验证”你能详细说明一下如何做到这一点@Peter?
    • @Roy,让 app-cli 输出 os.Args。
    【解决方案2】:

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

    【讨论】:

    • 这是否意味着我无法运行 ls、cat 等?
    • 我试过了,它返回这个错误 Error: unknown command "sh" for "app-cli"
    • 脚本部分似乎总是在shell中运行,因此从头开始使用是行不通的。
    【解决方案3】:

    找到答案

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

    【讨论】:

    • 没有从头开始安装,它是您可以拥有的最小的最小容器,因此它不附带操作系统或外壳
    猜你喜欢
    • 2021-06-16
    • 2017-04-28
    • 1970-01-01
    • 2019-01-16
    • 2015-01-25
    • 2015-05-19
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多