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

GitLab CI生成Dockerfile时出现dotnet: not found错误排查

问题根源

你遇到的dotnet: not found错误,核心原因是全局before_script的作用范围覆盖了docker_build_dev job:

  • publish_job和build_job未指定image,使用的是labs标签runner的默认环境,该环境预装了.NET Core,因此dotnet命令可正常执行。
  • docker_build_dev指定了gcr.io/kaniko-project/executor:v1.6.0-debug镜像,这个轻量级镜像未安装.NET Core SDK/runtime,所以全局before_script里的dotnet restore命令找不到可执行文件。
解决方案

给docker_build_dev job添加空的before_script,覆盖全局配置(该job无需执行dotnet restore):

docker_build_dev:
  tags:
    - labs
  image:
    name: gcr.io/kaniko-project/executor:v1.6.0-debug
    entrypoint: [""]
  only:
    - develop
    - ingress
  stage: docker
  before_script: []  # 新增此行,覆盖全局before_script
  script: |
    echo "checking dockerfile existence"
    if ! [ -e Dockerfile ]; then 
    echo "dockerfile doesn't exist. Trying to create a new dockerfile from csproj."
    docker_entrypoint=$(grep -m 1 AssemblyName ./src/*.csproj | sed -r 's/\s*<[^>]*>//g' | sed -r 's/\r$//g').dll
    cat > Dockerfile << EOF
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
COPY ./publish .

ENTRYPOINT dotnet $docker_entrypoint
EOF
    echo "dockerfile created"
    else
    echo "dockerfile exists"
    fi
额外优化建议
  • 生成的Dockerfile中RUN dotnet --version可删除,该命令仅用于验证,会增加镜像层数,实际构建无需保留。
  • 确保$PUBLISH_DIR变量在docker_build_dev job中能正确获取,需与publish_job的artifacts路径匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:06:29