Невозможно создать образ докера (ASP.NET Core) - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть основное решение asp.net, которое содержит 3 проекта.

Я хочу развернуть его в док-контейнере.

Вот как выглядит решение

enter image description here

Вот мой Dockerfile

 FROM mcr.microsoft.com/dotnet/core/sdk:2.2 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/core/aspnet:2.2
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "tooseeweb.dll"]

Но когда я запускаю сборку Docker, я получаю это в консоли

Пропускпроект "/TooSeeWeb.Core/TooSeeWeb.Core.csproj", поскольку он не найден.

Пропуск проекта "/TooSeeWeb.Infrastructure/TooSeeWeb.Infrastructure.csproj", так как он не найден.

MSBUILD: ошибка MSB1009: файл проекта не существует. Переключатель: TooSeeWeb.csproj

Ошибка: ResponseItem.ErrorDetail [code = 1, сообщение = Команда '/ bin / sh -c dotnet build "TooSeeWeb.csproj" -c Выпуск -o/ app 'вернул ненулевой код: 1] Не удалось развернуть' Dockerfile: TooSeeWeb / Dockerfile ': команда' / bin / sh -c dotnet build "TooSeeWeb.csproj" -c Release -o / app 'вернула некод нуля: 1

Где может быть проблема?

ОБНОВЛЕНИЕ

Структура папок моего решения

TooSeeWeb
 |- aspnet-core(folder)
    |-TooSeeWeb (folder)
      |- TooSeeWeb.sln
      |- TooSeeWeb
         |-Dockerfile
         |- TooSeeWeb.csproj
      |- TooSeeWeb.Core(folder)
         |- TooSeeWeb.Core.csproj
      |- TooSeeWeb.Infrastructure(folder)
         |- TooSeeWeb.Infrastructure.csproj

UPDATE2

Я перемещаю dockerfile в ту же папку с помощью sln (это на одну папку вверх)

Теперь мой файл Docker выглядит следующим образом

    ROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.sln ./
COPY TooSeeWeb/*.csproj ./TooSeeWeb/
COPY TooSeeWeb.Core/*.csproj ./TooSeeWeb.Core/
COPY TooSeeWeb.Infrastructure/.*csproj ./TooSeeWeb.Infrastructure/
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2
WORKDIR /app/TooSeeWeb
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "tooseeweb.dll"]

Но я получил ошибку

Шаг 4/14: COPY * .sln ./ COPY не удалось: исходные файлы не были указаны

1 Ответ

1 голос
/ 05 ноября 2019

Команда COPY не воспроизводит ту же структуру папок в целевой папке, поэтому все ваши файлы .csproj находятся в одной папке, а ссылки не работают. Попробуйте добавить

COPY TooSeeWeb.Core/*.csproj ./TooSeeWebCore/
COPY TooSeeWeb.Infrastructure/*.csproj ./TooSeeWeb.Infrastructure/

Обновление:
Пример структуры папок для решения с проектами в подпапках

src
 |-my.sln
 |-Dockerfile
 |-Web (folder)
   |-web.csproj
 |-Core (folder)
   |-core.csproj
 |-Infrastructure (folder)
   |-infrastructure.csproj

Файл Docker будет

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.sln ./
COPY Web/*.csproj ./Web/
COPY Core/*.csproj ./Core/
COPY Infrastructure/.*csproj ./Infrastructure/
RUN dotnet restore

# Copy everything else and build
COPY . ./
WORKDIR /app/Web
RUN dotnet build

Обновление 2
Если файла решения нет, я думаю, что вам нужно dotnet восстановить каждый проект по отдельности

COPY Web/*.csproj ./Web/
COPY Core/*.csproj ./Core/
COPY Infrastructure/.*csproj ./Infrastructure/
RUN dotnet restore ./Web/Web.csproj
RUN dotnet restore ./Core/Core.csproj
RUN dotnet restore ./Infrastructure/Infrastructure.csproj
etc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...