You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab共享Runner执行Pipeline报错:unknown command 'sh' for 'executor'

解决Kaniko镜像执行sh命令报错的问题

这个报错的核心原因是:gcr.io/kaniko-project/executor:debug镜像的默认ENTRYPOINT是["/kaniko/executor"],GitLab CI默认会在镜像上执行sh命令来运行脚本,这就相当于让/kaniko/executor去执行sh子命令,而它根本没有这个命令,所以报错。

下面给两种针对性的解决办法:

方法1:覆盖镜像的ENTRYPOINT,允许执行shell命令

如果你的Pipeline步骤确实需要先进入shell执行一些前置操作,可以在job里覆盖ENTRYPOINT为空数组,这样就能正常调用sh/bash了:

build-job:
  image: gcr.io/kaniko-project/executor:debug
  entrypoint: [""]  # 覆盖默认entrypoint
  script:
    - echo "先执行一些shell操作"
    - /kaniko/executor --context "${CI_PROJECT_DIR}" --dockerfile "${CI_PROJECT_DIR}/Dockerfile" --destination "your-registry/image:tag"

方法2:直接使用Kaniko executor的命令(推荐)

如果你的目的就是构建Docker镜像,没必要先进入shell,直接把Kaniko的执行命令作为script内容即可,这样不需要修改ENTRYPOINT:

build-job:
  image: gcr.io/kaniko-project/executor:debug
  script:
    - /kaniko/executor --context "${CI_PROJECT_DIR}" --dockerfile "${CI_PROJECT_DIR}/Dockerfile" --destination "your-registry/image:tag"

另外注意,如果你用的是GitLab容器注册表,--destination可以写成${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG:-latest},这样能自动关联项目的注册表和版本标签。

内容的提问来源于stack exchange,提问作者Teamy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 22:09:55