AWS Codebuild“名为 '3.1' 的 dotnet 的未知运行时版本此构建映像具有以下版本:2.2”

如何解决AWS Codebuild“名为 '3.1' 的 dotnet 的未知运行时版本此构建映像具有以下版本:2.2”

我使用代码管道线来构建和部署 - 从 github 拉取并部署到 fargate 容器 - 在代码构建中构建 dotnet 应用程序时,我遇到了这个错误。相当难倒。有没有人知道为什么它认为我的应用程序是 dotnet 2.2?

这是一个全新的管道


[Container] 2021/05/20 05:54:31 Waiting for agent ping
[Container] 2021/05/20 05:54:33 Waiting for DOWNLOAD_SOURCE
[Container] 2021/05/20 05:54:34 Phase is DOWNLOAD_SOURCE
[Container] 2021/05/20 05:54:34 CODEBUILD_SRC_DIR=/codebuild/output/src177986340/src
[Container] 2021/05/20 05:54:34 YAML location is /codebuild/output/src177986340/src/config/buildspec.yml
[Container] 2021/05/20 05:54:34 No commands found for phase name: install
[Container] 2021/05/20 05:54:34 Processing environment variables
[Container] 2021/05/20 05:54:35 Selecting 'dotnet' runtime version '3.1' based on manual selections...
[Container] 2021/05/20 05:54:35 Phase complete: DOWNLOAD_SOURCE State: Failed
[Container] 2021/05/20 05:54:35 Phase context status code: YAML_FILE_ERROR Message: UnkNown runtime version named '3.1' of dotnet. This build image has the following versions: 2.2

我的 dockerfile 指向 3.1

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env
workdir /app

# copy csproj and restore as distinct layers
copY *.csproj ./
RUN dotnet restore

# copy everything else and build
copY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:3.1
workdir /app
copY --from=build-env /app/out .
ENTRYPOINT ["dotnet","user-bff.dll"]

我的构建规范指向 3.1

version: 0.2

phases:
  install:
    runtime-versions:
      dotnet: 3.1
  pre_build:
    commands:
      - cd code/
      - echo Logging in to Amazon ECR
      - $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email)
      - IMAGE_URI="${REPOSITORY_URI}:latest"
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...
      - docker build --tag "$IMAGE_URI"
      - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:latest

  post_build:
    commands:
      - echo Build completed on `date`
      - echo Push the latest Docker Image...
      - docker push "$IMAGE_URI"
      - printf '[{"name":"App","imageUri":"%s"}]' "$IMAGE_URI" > images.json
artifacts:
  files: images.json

我的 dotnet 核心应用程序肯定是 3.1

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
    <RootNamespace>user_bff</RootNamespace>
  </PropertyGroup>

  <ItemGroup>
    <packagereference Include="AWSSDK.SimpleSystemsManagement" Version="3.3.106" />
    <packagereference Include="Microsoft.EntityFrameworkCore" Version="3.1.0" />
    <packagereference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.0">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </packagereference>
    <packagereference Include="MysqL.Data" Version="8.0.17" />
    <packagereference Include="MysqL.Data.EntityFrameworkCore" Version="8.0.17" />
    <packagereference Include="Amazon.Extensions.Configuration.SystemsManager" Version="1.2.0" />
  </ItemGroup>
  
</Project>

解决方法

从 Amazon Linux 2 x86_64 标准:1.0 迁移到 Amazon Linux 2 x86_64 标准:3.0 修复了这个问题!

,

基于评论。

该问题是由使用不支持 dotnet 3.1 的旧运行时映像版本 Amazon Linux 2 x86_64 standard:1.0 引起的。如 AWS docs 中所列,只有以下版本支持 dotnet 3.1:

  • 亚马逊 Linux 2 x86_64 标准:3.0

  • Amazon Linux 2 AArch64 标准:2.0

  • Ubuntu 标准:4.0

  • Ubuntu 标准:5.0

因此,解决方案是将映像版本升级到 Amazon Linux 2 x86_64 standard:3.0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?