Net Core развертывается в конфигурации Docker - PullRequest
0 голосов
/ 05 июня 2018

Впервые я работаю с ядром NET, поэтому я очень новичок в этой области.

Последнее обновление Visual Studio 2017 Docker 18.03.1

IЯ создал проект, который отлично работает в Visual Studio, и теперь хочу развернуть его в моем локальном Docker.

Я следовал инструкциям по сборке и запуску здесь: https://docs.microsoft.com/en-us/dotnet/core/docker/building-net-docker-images

Если я попробуючтобы запустить приложение ASP.NET локально, я получаю следующее:

dotnet run  
C:\Users\barn\source\repos\FLG\docker-compose.dcproj : error MSB4236: The SDK 'Microsoft.Docker.Sdk' specified could not be found.

The build failed. Please fix the build errors and run again.

Однако, когда я загружаю образец приложения из статьи, он работает нормально, и я могу развернуть его в Docker, и все просто работает.

Это привело меня к выводу, что причина не в настройке Windows (пути и т. Д.), А в настройке проекта VS.

Итак, я посмотрел файлы Docker, но не могунайти что-нибудь, где указан Docker sdk

Theirs:

FROM microsoft/aspnetcore-build:2.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 microsoft/aspnetcore:2.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

Mine:

FROM microsoft/aspnetcore:2.0-nanoserver-1709 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0-nanoserver-1709 AS build
WORKDIR /src
COPY *.sln ./
COPY FLG/FLG.csproj FLG/
RUN dotnet restore
COPY . .
WORKDIR /src/FLG
RUN dotnet build -c Release -o /app

FROM build AS publish
RUN dotnet publish -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "FLG.dll"]

Я пытался изменить эту строку

aspnetcore:2.0-nanoserver-1709 

до

aspnetcore:2.0

Но без разницы.

РЕДАКТИРОВАТЬ:

1) Я нашел, где МУпоминается icrosoft.Docker.Sdk, он находится в файле, который НЕ виден из VS, но я могу увидеть файл в FileExplorer (docker-compose.dcproj), содержимое выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" Sdk="Microsoft.Docker.Sdk">
  <PropertyGroup Label="Globals">
    <ProjectVersion>2.0</ProjectVersion>
    <DockerTargetOS>Windows</DockerTargetOS>
    <ProjectGuid>26178887-f40e-42ab-85cd-059a38097c71</ProjectGuid>
    <DockerLaunchBrowser>True</DockerLaunchBrowser>
    <DockerServiceUrl>http://{ServiceIPAddress}/api/values</DockerServiceUrl>
    <DockerServiceName>flg</DockerServiceName>
  </PropertyGroup>
  <ItemGroup>
    <None Include="docker-compose.override.yml">
      <DependentUpon>docker-compose.yml</DependentUpon>
    </None>
    <None Include="docker-compose.yml" />
    <None Include=".dockerignore" />
  </ItemGroup>
</Project>

2) Образец приложения НЕ имеет этот файл, фактически он вообще не имеет "проекта" docker-compose

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

Попробуйте следующий DockerFile

FROM microsoft/aspnetcore-build as builder
WORKDIR /build
COPY . .
RUN dotnet restore \
    && dotnet publish [path to FLG].csproj -c release -o /build/publish
FROM microsoft/aspnetcore
WORKDIR /app
COPY --from=builder /build/publish .
EXPOSE 80/tcp
ENV ASPNETCORE_URLS http://0.0.0.0:80   
ENTRYPOINT ["dotnet", "FLG.dll"]
0 голосов
/ 05 июня 2018

Это известная проблема, описанная здесь:

https://github.com/dotnet/cli/issues/6178

Это всегда было проблемой, и, очевидно, в обозримом будущем ее не исправят.

В любом случае, спасибо за помощь Miq & BlackPOP

0 голосов
/ 05 июня 2018

Обновление

Позвольте мне изменить мой ответ.

Я думаю, что основная проблема для вас заключается в том, что вы хотите запустить решение в докере, запустив dotnet run из cmdлиния.Это не тот путь.

У меня есть решение с 3 различными приложениями aspnetcore, работающими все вместе в докере, и я также использую dcproj, чтобы включить отладку VS в докере, и она отлично работает.

Как вывыяснил, у MS есть проблемы с dcproj.Я согласен с этим утверждением, и я обнаружил еще больше проблем с ним (т. Е. Если у вас есть сервисы, не относящиеся к aspnetcore, есть и ошибки).

Мое решение состоит в том, что запускать докерские сервисы вне VisualStudio - этопросто запустите docker-compose up вместо dotnet run.Если вы хотите запустить приложение aspnetcore без докера, запустите один проект, вместо этого запустите целое решение.

Надеюсь, это поможет вам в довольно трудном путешествии к докеру + майкрософт :) У них еще есть много вещей, которые нужно сделать и исправить,так что вам нужно быть терпеливым.Поверьте, это намного лучше, чем год назад.)


Docker SDK является частью Visual Studio 2017. Он нужен VS для понимания настройки проекта .dcproj.Он не имеет ничего общего с файлами Dockerfile или docker-compose.yml.

Это не имеет значения для самого docker - это необходимо, только если вы хотите запустить отладку из VS приложения, работающего в Docker-контейнере.

С другой стороны, я помню проблемы с Docker SDK, когда у меня была нестандартная конфигурация файлов docker-compose.yml.Вы можете поделиться ими?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...