@lucky4

Как настроить docker?

Есть приложение, которое разбито на слои. Приложение состоит из нескольких слоев, которые типу консоли и главное, типу точки входа веб-приложения. Я хочу это приложение, эту API - закинуть в docker-контейнр.
609912c6a45ef177389083.png

В самом API(Web Api, где находятся контроллеры) у меня есть Dockerfile:
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build

ARG BUILDCONFIG=REALEASE
ARG VERSION=1.0.0

COPY ShoppingCart.API.csproj /build/
RUN dotnet restore ./build/ShoppingCart.API.csproj

COPY . ./build/
WORKDIR /build/
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet:3.1
WORKDIR /app

COPY --from=build /build/out .
ENTRYPOINT ["dotnet", "ShoppingCart.API.dll"]


И уже в самом solution, лежит docker-compose:
version: '3.9'

networks:
 localdev:
  name: localdev

services:
 main-api:
  build: ShoppingCart.API
  restart: always
  ports:
   - "7000:80"
  depends_on:
   - db-server
  networks:
   - localdev

 db-server:
  image: "mcr.microsoft.com/mssql/server"
  container_name: db-server
  environment:
   - ACCEPT_EULA=Y
   - MSSQL_SA_PASSWORD=Laketych
   - MSSQL_TCP_PORT=1433
  ports:
   - "1400:1433"
  networks:
   - localdev


Когда в консоли хочу запустить приложение, вначале проходит "сборка" и потом начинаются ошибки с зависимостями. Возможно, нужно что-то в докер/докер-компоуз что-то дописать и тд?
60991381e737a833133611.png
  • Вопрос задан
  • 116 просмотров
Решения вопроса 1
ayazer
@ayazer
Sr. Software Engineer
Как уже написал Василий Банников - вы собираете проект, не весь солюшен. Потому и падает - оно не может найти свои зависимости. Ниже - пример, обрезаный с рабочего решения:

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS builder
COPY . .
WORKDIR /src

RUN dotnet restore "SolutionName.sln" && \
        dotnet build "SolutionName.sln" -c Release -o /src/build && \
        cd /path/to/proj && \
        dotnet publish "ProjectToPublish.csproj" -c Release -o /src/publish

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS final

WORKDIR /app
COPY --from=publish /src/publish .

ENTRYPOINT ["dotnet", "ProjectName.dll"]


вам по сути надо поправить
RUN dotnet restore ./build/ShoppingCart.API.csproj
RUN dotnet publish -c Release -o out


Ну и да, судя по ошибке (описание которой я бы скопировал если бы вы вставляли текст, а не скриншоты) - у вас таки нет5. Потому и образы соотв. нужно использовать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@vabka Куратор тега C#
Токсичный шарпист
Нужно копировать не только ShoppingCart.API, но и проекты, от которых он зависит
Ответ написан
@lucky4 Автор вопроса
Я вот таким вот вариантом сделал. Была проблема с копированием, но я файл docker-compose перенес туда же где и Dockerfile

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src

COPY ["ShoppingCart.API/ShoppingCart.API.csproj", "ShoppingCart.API/"]
COPY ["ShoppingCart.Domain.Entities/ShoppingCart.Domain.Entities.csproj", "ShoppingCart.Domain.Entities/"]
COPY ["ShoppingCart.Domain.Interfaces/ShoppingCart.Domain.Interfaces.csproj", "ShoppingCart.Domain.Interfaces/"]
COPY ["ShoppingCart.Infrastructure.Data/ShoppingCart.Infrastructure.Data.csproj", "ShoppingCart.Infrastructure.Data/"]
COPY ["ShoppingCart.Infrastructure.Business/ShoppingCart.Infrastructure.Business.csproj", "ShoppingCart.Infrastructure.Businesss/"]
COPY ["ShoppingCart.Services.Interfaces/ShoppingCart.Services.Interfaces.csproj", "ShoppingCart.Services.Interfaces/"]


RUN dotnet restore "ShoppingCart.API/ShoppingCart.API.csproj"
COPY . .
WORKDIR "/src/ShoppingCart.API"
RUN dotnet build "ShoppingCart.API.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "ShoppingCart.API.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "ShoppingCart.API.dll"]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы