У меня есть Dockerfile:
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER app
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["Example.csproj", "./"]
RUN dotnet restore "Example.csproj"
COPY . .
WORKDIR "/src/"
RUN dotnet build "Example.csproj" -c $BUILD_CONFIGURATION -o /app/build
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "Example.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Example.dll"]
И есть docker-compose:
version: "3.9"
networks:
app-dev:
driver: bridge
services:
app:
container_name: app
links:
- db
build:
context: .
dockerfile: Dockerfile
environment:
- ASPNETCORE_URLS=http://+
ports:
- "8080:80"
networks:
- app-dev
depends_on:
- db
db:
container_name: postgres-db
image: postgres:latest
restart: always
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: example
ports:
- "5432:5432"
networks:
- app-dev
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
Я запускаю docker compose up, все запускается без ошибок. Приложение работает до тех пор пока я не попытаюсь обратиться к эндпоинту который берет данные с бд получаю ошибку
fail: Microsoft.EntityFrameworkCore.Database.Connection[20004]
app | An error occurred using the connection to database 'example' on server 'tcp://localhost:5432'.
app | fail: Microsoft.EntityFrameworkCore.Update[10000]
app | An exception occurred in the database while saving changes for context type 'Example.Data.AppDbContext'.
app | System.InvalidOperationException: An exception has been raised that is likely due to a transient failure.
Сама бд успешно создалась и к ней можно подключится, так же строка подключения, по всей видимости, без ошибок(т.к. если запустить контейнер только с postgresql и запустить приложение через dotnet run ошибок не будет)
"ConnectionStrings": {
"DefaultConnection": "User ID=postgres;Password=postgres;Host=localhost;Port=5432;Database=example;"
}