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

定制Hugo Docker镜像适配GitLab CI时出现sh命令未知报错如何解决

问题解决

你遇到的报错 Error: unknown command "sh" for "hugo" 翻译成中文为:错误:"hugo" 命令无法识别 "sh" 子命令

问题根源

  • 旧CI使用的klakegg/hugo:asciidoctor-ci镜像默认入口点(ENTRYPOINT)为shell,GitLab CI运行任务时默认会调用sh执行script中的命令,逻辑完全匹配,所以运行正常
  • 自定义镜像选择的基础镜像为klakegg/hugo:asciidoctor,该版本镜像默认入口点是hugo二进制文件,GitLab CI触发任务时会尝试执行hugo sh 你的脚本内容,hugo没有sh子命令,因此直接报错

修复方案

有两种可选方案,任选其一即可:

方案1:更换基础镜像为带ci后缀的版本

直接沿用旧CI使用的asciidoctor-ci标签作为自定义镜像的基础,该版本默认入口点就是shell,完全适配GitLab CI的执行逻辑,修改后的Dockerfile如下:

FROM klakegg/hugo:asciidoctor-ci

RUN gem install asciidoctor-html5s --no-document \
    && apk --no-cache add openssh sshpass

方案2:手动重置自定义镜像的入口点

如果你不想更换基础镜像,只需要在Dockerfile中添加一行重置入口点的配置即可,修改后的Dockerfile如下:

FROM klakegg/hugo:asciidoctor

RUN gem install asciidoctor-html5s --no-document \
    && apk --no-cache add openssh sshpass
# 重置入口点为shell,适配GitLab CI执行逻辑
ENTRYPOINT []

后续操作

修改Dockerfile后重新构建推送自定义镜像,再删除CI配置中gem install和apk add两行冗余的依赖安装命令,重新运行CI任务即可正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:27:03