@lucky4

Как обновить БД в Docker?

Есть приложение API, которое работает с БД и с EF Core, на миграциях.
Приложение перенес в докер контейнер. Все его зависимости и mssql бд - перенесена в контейнр отдельный.
Приложение запускается на порту, swagger показывает все методы, модели и тд.

НО! Когда после перехода на какой-то контроллер с методом GET. Выводится ошибка:
Failed executing DbCommand (56ms) [Parameters=[@__p_0='?' (DbType = Int32), @__p_1='?' (DbType = Int32)], CommandType='Text', CommandTimeout='30']
web      | SELECT [t].[Id], [t].[Description], [t].[Label], [t].[Price], [t].[Thumbnail], [t0].[ProductId], [t0].[CategoryId], [t0].[Id], [t0].[Label], [t0].[Thumbnail]
web      | FROM (
web      |     SELECT [p].[Id], [p].[Description], [p].[Label], [p].[Price], [p].[Thumbnail]
web      |     FROM [Products] AS [p]
web      |     ORDER BY [p].[Id]
web      |     OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY
web      | ) AS [t]
web      | LEFT JOIN (
web      |     SELECT [p0].[ProductId], [p0].[CategoryId], [c].[Id], [c].[Label], [c].[Thumbnail]
web      |     FROM [ProductCategories] AS [p0]
web      |     INNER JOIN [Categories] AS [c] ON [p0].[CategoryId] = [c].[Id]
web      | ) AS [t0] ON [t].[Id] = [t0].[ProductId]
web      | ORDER BY [t].[Id], [t0].[ProductId], [t0].[CategoryId], [t0].[Id]
web      | [13:05:29 ERR] An exception occurred while iterating over the results of a query for context type 'ShoppingCart.Infrastructure.Data.DataContext'.
web      | Microsoft.Data.SqlClient.SqlException (0x80131904): Invalid object name 'Products'.


Как я понимаю, что сама БД существует, т.к. коннект произошел. Но, нет данных и нет таблицы. *из солюшн скопировал и сбилдит проект где есть миграции.

Вопрос: Как мне можно тогда "насильно" апдейтнуть бд? Знаю, что есть dotnet cli команды, типу dotnet ef database update и тд. Но не пойму как мне и куда его внести)

DOCKERFILE
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["ShoppingCart.API/ShoppingCart.API.csproj", "ShoppingCart.API/"]
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 mcr.microsoft.com/dotnet/sdk:5.0 AS migration
WORKDIR /src
COPY ["ShoppingCart.Infrastructure.Data/ShoppingCart.Infrastructure.Data.csproj", "ShoppingCart.Infrastructure.Data/"]
RUN dotnet restore "ShoppingCart.Infrastructure.Data/ShoppingCart.Infrastructure.Data.csproj"
COPY . .
WORKDIR "/src/ShoppingCart.Infrastructure.Data"
RUN dotnet build "ShoppingCart.Infrastructure.Data.csproj" -c Release -o /app/migration

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

FROM base AS final
WORKDIR /migration
COPY --from=migration /app/migration .

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


Docker-compose
version: '3.9'

networks:
  localdev:
   name: localdev

services:
  web:
   container_name: web
   build: .
   depends_on: [ mssql ]
   ports:
    - "8080:80"
   networks:
    - localdev

  mssql:
   image: "mcr.microsoft.com/mssql/server"
   container_name: mssql
   hostname: mssql
   environment:
    SA_PASSWORD: "fA0bD7rO3iE1mU0w"
    ACCEPT_EULA: "Y"
   restart: unless-stopped
   networks:
    - localdev
   ports:
    - "1433:1433"
   expose:
    - 1433
  • Вопрос задан
  • 478 просмотров
Пригласить эксперта
Ответы на вопрос 1
Вопрос: Как мне можно тогда "насильно" апдейтнуть бд? Знаю, что есть dotnet cli команды, типу dotnet ef database update и тд. Но не пойму как мне и куда его внести)

DbContext.Database.EnsureCreated()
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы