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_devjob中能正确获取,需与publish_job的artifacts路径匹配。
内容的提问来源于stack exchange,提问作者Golide
相关产品推荐
相关产品推荐

