У меня приложение, запускается в docker-compose. Вся конфигурация бд прописана в .env. Раньше для создания мигарций просто писал dotnet ef migrations add MyMigration, а тут что-то сломалось и любые обращения к dotnet ef выглядят так:
PS C:\Users\User\Source\Repos\EndowmentFund\Server> dotnet ef migrations list
Build started...
Build succeeded.
An error occurred while accessing the Microsoft.Extensions.Hosting services. Continuing without the application service provider. Error: Value cannot be null. (Parameter 's')
Unable to create a 'DbContext' of type 'RuntimeType'. The exception 'Unable to resolve service for type 'Microsoft.EntityFrameworkCore.DbContextOptions`1[Server.Storage.Db.AppDbContext]' while attempting to activate 'Server.Storage.Db.AppDbContext'.' was thrown while attempting to create an instance. For the different patterns supported at design time, see https://go.microsoft.com/fwlink/?linkid=851728
Контекст бд вполне обычный:
public class AppDbContext(DbContextOptions<AppDbContext> options) : IdentityDbContext(options)
{
public DbSet<Event> Events { get; set; }
public DbSet<Donation> Donations { get; set; }
}
Просто как приложение, открытое в браузере все работает. Что может быть не так?
Вот пример моего .env
POSTGRES_DB=database
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_HOST=database
POSTGRES_PORT=5432
APP_PORT=0
ASPNETCORE_ENVIRONMENT=Development
ASPNETCORE_HTTP_PORT=8080
Dockerfile# Этот этап используется при запуске из VS в быстром режиме (по умолчанию для конфигурации отладки)
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
RUN mkdir -p /app/reports-data && chown -R $APP_UID:$APP_UID /app/reports-data
USER $APP_UID
WORKDIR /app
EXPOSE ${ASPNETCORE_HTTP_PORT}
# Этот этап используется для сборки проекта службы
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["Server/Server.csproj", "Server/"]
COPY ["Integration.Payment/Integration.Payment.csproj", "Integration.Payment/"]
COPY ["Server.Core/Server.Core.csproj", "Server.Core/"]
RUN dotnet restore "./Server/Server.csproj"
COPY . .
WORKDIR "/src/Server"
RUN dotnet build "./Server.csproj" -c $BUILD_CONFIGURATION -o /app/build
# Этот этап используется для публикации проекта службы, который будет скопирован на последний этап
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./Server.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
# Этот этап используется в рабочей среде или при запуске из VS в обычном режиме (по умолчанию, когда конфигурация отладки не используется)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Server.dll"]
docker-compose.ymlservices:
server:
image: ${DOCKER_REGISTRY-}server
build:
context: .
dockerfile: Server/Dockerfile
depends_on:
- database
networks:
- app_network
volumes:
- reports-data:/app/reports-data
ports:
- "${APP_PORT:-0}:${ASPNETCORE_HTTP_PORT}"
env_file:
- .env
database:
image: postgres:latest
container_name: database
env_file:
- .env
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U postgres -d postgres" ]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
deploy:
resources:
limits:
cpus: '1'
memory: 4G
networks:
- app_network
volumes:
- postgres-data:/var/lib/postgresql/data
ports:
- "5432:5432"
volumes:
postgres-data:
reports-data:
networks:
app_network:
driver: bridge