docker - 如何在 docker 容器内托管 asp.net core web api

标签 docker asp.net-core asp.net-core-webapi

我最近开始学习 docker,但在托管使用 Visual Studio Code< 创建的简单 asp.net core Web api 样板应用程序时遇到问题docker Windows 容器内。

我已在项目中设置了 Docker Fie 并运行 docker build --tag helloapi 。

但是当我运行docker run -p 9000:80 helloapi时,我收到以下错误:

It was not possible to find any compatible framework version The specified framework 'Microsoft.AspNetCore.App', version '2.1.1' was not found. - Check application dependencies and target a framework version installed at: \ - Alternatively, install the framework version '2.1.1'.

我尝试过很多教程this thisthis .

我尝试了不同的 ASP.NET Core docker 镜像 this thisthis .

dotnet 核心版本:

 dotnet --info

.NET Core SDK (reflecting any global.json):
  Version:   2.1.402

.NET Core SDKs installed:
  2.1.402 

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.1.4 
  Microsoft.AspNetCore.App 2.1.4 
  Microsoft.NETCore.App 2.1.4 

helloapi.csproj 文件

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

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Folder Include="wwwroot\" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" />
  </ItemGroup>

</Project>

Docker 文件:

FROM microsoft/aspnetcore
ARG source
WORKDIR /app
EXPOSE 80
COPY ${source:-/publish} .
ENTRYPOINT ["dotnet", "HelloApi.dll"]

enter image description here

注意:我无法切换到 Linux 容器,因为 docker 显示一些运行时错误,所以我使用 Windows 容器并且 Turn windows 功能中未启用 IIS Server

我无法弄清楚我做错了什么?

任何人都可以指导我在 Windows 容器中使用 docker 托管 api 的正确方法吗?

任何帮助都会很棒。

最佳答案

看起来生成的 dockerfile 表单没有引用 dotnet:2.1-aspnetcore-runtimedotnet:2.1-sdk

尝试以下步骤

将以下 Dockerfile 添加到您的解决方案文件夹

FROM microsoft/dotnet:2.1-sdk AS build-env
WORKDIR /build
COPY . /build

#Restore
RUN dotnet restore ./HelloApi.sln

RUN dotnet publish ./HelloApi/ -o /publish --configuration Release

# Build runtime image
FROM microsoft/dotnet:2.1-aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /publish/ .
ENTRYPOINT ["dotnet", "WebApp.dll"]

构建它

docker build -t app1 。

运行

docker run -p 8080:80 --name appcontainer1 app1

测试一下

浏览至 http://localhost:8080

关于docker - 如何在 docker 容器内托管 asp.net core web api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52960906/

相关文章:

c# - ASP.NET Core JSON-RPC

shell - 在shell脚本中使用docker登录无法正常工作

c# - 以编程方式注入(inject)依赖asp.net core

c# - 在 ASP.NET Core MVC 中获取主机地址

asp.net-core-2.0 - 如何编写中间件来测量asp.net core 2.0中请求处理时间

c# - ASP.NET Core Web Api 发送 Access-Control-Allow-Origin : null CORS header and chrome is erroring, 如何修复?

docker - 不使用docker命令的ansible aws ecr登录

docker - 无法通过ClusterIP(:443)从节点/节点访问Kubernetes kube-apiserver。

Docker-compose 推荐使用数据容器的方式

c# - 将 ASP.NET Core 5.0 部署到 Ubuntu 20.04,出现 500 服务器错误和白屏