我正在嘗試構建一個 docker-compose 檔案,該檔案將啟動我的 EF Core Web api 專案,連接到我的 Postgres 資料庫。
我很難讓 EF 專案連接到資料庫。
這是我目前擁有的docker-compose.yml:
version: '3.8'
services:
web:
container_name: 'mybackendcontainer'
image: 'myuser/mybackend:0.0.6'
build:
context: .
dockerfile: backend.dockerfile
ports:
- 8080:80
depends_on:
- postgres
networks:
- mybackend-network
postgres:
container_name: 'postgres'
image: 'postgres:latest'
environment:
- POSTGRES_USER=username
- POSTGRES_PASSWORD=MySuperSecurePassword!
- POSTGRES_DB=MyDatabase
networks:
- mybackend-network
expose:
- 5432
volumes:
- ./db-data/:/var/lib/postgresql/data/
pgadmin:
image: dpage/pgadmin4
ports:
- 15433:80
env_file:
- .env
depends_on:
- postgres
networks:
- mybackend-network
volumes:
- ./pgadmin-data/:/var/lib/pgadmin/
networks:
mybackend-network:
driver: bridge
我的 web 專案 docker 檔案如下所示:
# Get base DSK Image from Microsoft
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build-env
WORKDIR /app
# Copy the CSPROJ file and restore any dependencies (via NUGET)
COPY *.csproj ./
RUN dotnet restore
# Copy the project files and build our release
COPY . ./
RUN dotnet publish -c Release -o out
# Generate runtime image - do not include the whole SDK to save image space
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
EXPOSE 80
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "MyBackend.dll"]
我的連接字串如下所示:
User ID =bootcampdb;Password=MySuperSecurePassword!;Server=postgres;Port=5432;Database=MyDatabase; Integrated Security=true;Pooling=true;
目前我有兩個問題:
Npgsql.PostgresException (0x80004005): 57P03: the database system is starting up當我這樣做時,我得到了docker-compose -up。我試圖將其添加healthcheck到我的 postgress 資料庫中,但這沒有用。當我轉到我的 Docker 桌面應用程式并再次啟動我的后端時,該訊息消失了,我遇到了第二個問題......其次,資料庫啟動后它說:
FATAL: password authentication failed for user "username". 看起來它沒有為資料庫創建我的用戶。我什至更改為不使用 .env 檔案,但在我的 docker-compose 檔案中有值,但它仍然無法正常作業。我試圖docker-compose down -v確保我的卷被洗掉。
抱歉,這些可能是愚蠢的問題,我對容器化仍然很陌生,并試圖讓它發揮作用。
任何幫助將不勝感激!
uj5u.com熱心網友回復:
問題 1:depends_on僅意味著 docker-compose 將等到您的 postgres 容器啟動后才會啟動 Web 容器。postgres 容器需要一些時間來準備接受連接,如果您在它準備好之前嘗試連接,則會收到您看到的錯誤。您需要以一種等待 Postgres 準備好通過延遲重試連接的方式對后端進行編碼。
問題 2:Postgres 僅在沒有資料庫存在的情況下才創建用戶和資料庫。您可能在./db-data/主機上有一個現有的資料庫。嘗試洗掉./db-data/,Postgres 應該使用您設定的環境變數創建用戶和資料庫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/494614.html
標籤:PostgreSQL 码头工人 实体框架 码头工人撰写
上一篇:HasValue使EF查詢無效
