Как разместить ядро ​​asp.net wep api внутри контейнера Docker - PullRequest
0 голосов
/ 24 октября 2018

Я недавно начал изучать docker, но я сталкиваюсь с проблемами при размещении простого asp.net core web api приложения котельной плиты, созданного с использованием Visual Studio Code внутри docker окна контейнера.

Я установил Docker Fie в проекте и запуске docker build --tag helloapi .

Но когда я запускаю docker run -p 9000:80 helloapi, я получаю следующую ошибку:

Не удалось найти какую-либо совместимую версию платформы..AspNetCore.App ', версия' 2.1.1 'не найдена.- Проверьте зависимости приложений и выберите версию платформы, установленную по адресу: \ - Или установите версию платформы '2.1.1'.

Я пробовал много учебников this это и это .

У меня есть разные образы докеров для ядра asp.net это это и это.

версия ядра 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 Container, посколькуДокер показывает некоторую ошибку во время выполнения, поэтому я использую Windows Container, а также IIS Server не включен в функциях Turn windows.

Я не могу понять, что я делаю?

Может кто-нибудь подсказать мне правильный путь для размещения api, используя docker в контейнере Windows.

Любая помощь будет отличной.

Ответы [ 3 ]

0 голосов
/ 24 октября 2018

Похоже, что сгенерированная форма файла dockerfile не ссылается на dotnet:2.1-aspnetcore-runtime и dotnet: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

0 голосов
/ 25 октября 2018

Похоже, что учебные пособия, которым вы следовали, все для .NET Core 2.0, но ваш проект использует .NET Core 2.1.

Как вы (вероятно) знаете, первая строка в Dockerfileопределяет, на каком изображении запускать ваше приложение.В твоем случае ты microsoft/aspnetcore.Если вы посмотрите на страницу Docker Hub для образа microsoft / aspnetcore , вы увидите, что на нем написано:

Последние версии для 2.1 и новее теперь доступны в microsoft / dotnet,См. Эту ссылку для получения дополнительной информации о переходе на 2.1.

Нажав на эту ссылку, вы перейдете на страницу Docker Hub для изображения microsoft / dotnet ,который поддерживает .NET Core 2.1.

Итак, как указано в другом ответе, вам нужно изменить Dockerfile, чтобы он ссылался на другой образ, на котором установлена ​​среда выполнения .NET Core 2.1.Вы можете просто изменить первую строку на:

FROM microsoft/dotnet

, в которой может использоваться образ с установленным SDK .NET Core 2.1, но этот образ будет излишним, если вы планируете развернуть образ в рабочей среде.

В настоящее время принято использовать многоэтапные файлы Docker для выполнения этапов сборки, тестирования и публикации внутри контейнера.Вы можете прочитать об этом здесь .Это позволяет использовать другую базу изображений для создания и тестирования приложения, но использовать только конечный образ меньшего времени выполнения для окончательного рабочего образа.

Взгляните на некоторые из .NET Core Docker Samples , чтобы узнать, как это сделать.

Просто будьте внимательны, когда вы ищете учебники, в которых они используют более новый .NET Core 2.1 в качестве базового образа, или убедитесь, что вы создаете любые приложения с использованием того же .NET Core.версия в качестве учебного пособия.

Надеюсь, что поможет.

0 голосов
/ 24 октября 2018

Я успешно разместил приложения dotnet core 2.1 WebAPI в докере, используя веб-сервер Kestrel с изображением microsoft / dotnet и тегами 2.1-sdk и dotnet:2.1-aspnetcore-runtime для сборки и выполнения соответственно в многоэтапной сборке, например,

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
FROM microsoft/dotnet:2.1-sdk AS build

Надеюсь, это поможет.

...