Запуск Entity Framework в контейнере Docker
Есть веб-приложение на ASP .NET 7, в котором установлена зависимость Entity Framework (файл WebApplication.csproj
):
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.10">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.4" />
</ItemGroup>
</Project>
Приложение запускается в контейнере Docker (содержимое файла Dockerfile
):
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY ["WebApplication.csproj", "./"]
RUN dotnet restore "WebApplication.csproj"
COPY . .
WORKDIR "/src/"
RUN dotnet build "WebApplication.csproj" -c Release -o /app/build
# Добавляем Entity Framework CLI в образ
RUN dotnet tool install --global dotnet-ef --version 7.0.10
ENV PATH "$PATH:/root/.dotnet/tools"
FROM build AS publish
RUN dotnet publish "WebApplication.csproj" -c Release -o /app/publish /p:UseAppHost=false
# Окончательный образ для запуска приложения
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication.dll"]
Как видно в файле, мы при сборке образа устанавливаем команду dotnet-ef
. Далее с помощью docker compose up
запускаем наши контейнеры.
Проблема в том, что если зайти в контейнер (docker exec -it <container-id> /bin/bash
) и попробовать выполнить команду dotnet ef
(или любую другую), то получаю ошибку:
The command could not be loaded, possibly because:
* You intended to execute a .NET application:
The application 'dotnet-ef' does not exist.
* You intended to execute a .NET SDK command:
No .NET SDKs were found.
Download a .NET SDK:
https://aka.ms/dotnet/download
Learn about SDK resolution:
https://aka.ms/dotnet/sdk-not-found
Пробовал в Dockerfile
добавить строки:
# Установка .NET SDK для Entity Framework
RUN apt update && \
apt install -y --no-install-recommends apt-transport-https && \
apt install -y dotnet-sdk-7.0
Но получаю сообщение о том, что dotnet-sdk-7.0
в репозитории не найден:
...
5.703 Reading package lists...
6.579 Building dependency tree...
6.766 Reading state information...
6.927 E: Unable to locate package dotnet-sdk-6.0
6.927 E: Couldn't find any package by glob 'dotnet-sdk-7.0'
------
failed to solve: process "/bin/sh -c apt update && apt install -y --no-install-recommends apt-transport-https && apt install -y dotnet-sdk-7.0" did not complete successfully: exit code: 100
Та же самая проблема, если пробую установить .NET SDK не версии 7.0, а 6.0. Может быть у кого-нибудь есть рабочие конфигурации, как использовать Entity Framework в контейнере Docker? Потому что я не знаю, в правильном ли направлении я двигаюсь, в чём моя ошибка и где что нужно исправить. Буду благодарен любой помощи.