我正在尝试构建一个 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
确保我的卷被删除。
抱歉,这些可能是愚蠢的问题,我对容器化还很陌生,并试图让它发挥作用。
任何帮助将不胜感激!
问题 1:depends_on
仅意味着 docker-compose 将等到您的 postgres 容器启动后才会启动 Web 容器。postgres 容器需要一些时间来准备接受连接,如果您在它准备好之前尝试连接,则会收到您看到的错误。您需要以一种等待 Postgres 准备好通过延迟重试连接的方式对后端进行编码。
问题 2:Postgres 仅在没有数据库存在的情况下才创建用户和数据库。您可能在./db-data/
主机上有一个现有的数据库。尝试删除./db-data/
,Postgres 应该使用您设置的环境变量创建用户和数据库。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句