使用Docker-Compose连接PostgreSQL失败:主机无法找到
问题:主机无法找到或连接主机出错
相关配置
docker-compose 文件
version: '3.4' services: backend: image: webapiwithdockerpostgre build: context: . dockerfile: WebApiWithDockerPostgre/Dockerfile database: image: postgres restart: always ports: - 5432:5432 environment: POSTGRES_USER: admin POSTGRES_PASSWORD: superpassworddocker POSGRES_DB: TestDb volumes: - database-data:/var/lib/postgresql/data/ volumes: database-data: pgadmin:
Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build WORKDIR /src COPY ["WebApiWithDockerPostgre/WebApiWithDockerPostgre.csproj", "WebApiWithDockerPostgre/"] RUN dotnet restore "WebApiWithDockerPostgre/WebApiWithDockerPostgre.csproj" COPY . . WORKDIR "/src/WebApiWithDockerPostgre" RUN dotnet build "WebApiWithDockerPostgre.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "WebApiWithDockerPostgre.csproj" -c Release -o /app/publish /p:UseAppHost=false FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "WebApiWithDockerPostgre.dll"]
连接字符串
"Host=database;Database=DbTest;Username=admin;Password=superpassworddocker;Port=5432"
问题排查与修复方案
经检查,配置存在3处潜在问题,对应修复方法如下:
- PostgreSQL环境变量拼写错误:
POSGRES_DB应为POSTGRES_DB,修正后数据库才能正确初始化指定的库名。 - 连接字符串数据库名不匹配:连接字符串中的
DbTest与docker-compose里配置的TestDb不一致,需统一为TestDb。 - 服务启动顺序无依赖:backend服务未配置依赖database服务,可能导致backend启动时数据库还未就绪。需在backend服务中添加
depends_on配置,确保数据库先启动:backend: image: webapiwithdockerpostgre build: context: . dockerfile: WebApiWithDockerPostgre/Dockerfile depends_on: - database
补充:
depends_on仅保证启动顺序,若需等待数据库完全就绪,可添加健康检查配置,示例如下:database: image: postgres restart: always ports: - 5432:5432 environment: POSTGRES_USER: admin POSTGRES_PASSWORD: superpassworddocker POSTGRES_DB: TestDb volumes: - database-data:/var/lib/postgresql/data/ healthcheck: test: ["CMD-SHELL", "pg_isready -U admin -d TestDb"] interval: 5s timeout: 5s retries: 5同时backend服务的
depends_on可关联健康状态:backend: # ... 其他配置 depends_on: database: condition: service_healthy
内容的提问来源于stack exchange,提问作者dasper
相关产品推荐
相关产品推荐

