You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 20:10:48