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

如何解决Docker部署的.NET API中出现的‘The ConnectionString property has not been initialized.’错误

如何解决Docker部署的.NET API中出现的‘The ConnectionString property has not been initialized.’错误

看起来你在Docker部署.NET API时踩了数据库连接的坑,我帮你梳理几个关键排查点,应该能快速解决问题:

1. 修复appsettings.json的配置结构(最核心问题)

我注意到你的ConnectionStrings节点被错误嵌套在Logging节点里了!.NET的配置系统默认会从根节点下读取ConnectionStrings配置,而不是Logging的子节点,这直接导致builder.Configuration.GetConnectionString("DefaultConnection")返回null,自然就报出连接字符串未初始化的错误。

把配置调整为正确的结构:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "ConnectionStrings": {
    "DefaultConnection": "Host=db;Port=5432;Database=my_db;Username=postgres;Password=example"
  },
  "AllowedHosts": "*"
}

2. 确保PostgreSQL服务完全就绪后再启动API

Docker Compose的depends_on只保证容器的启动顺序,不保证PostgreSQL服务已经初始化完成、可以接受连接。如果API启动时数据库还没准备好,也会触发连接失败的问题。

可以给db服务添加健康检查,让API等待数据库就绪后再启动:

services:
  db:
    image: postgres
    restart: always
    environment:
      POSTGRES_USER: postgres
      POSTGRES_DB: my_db
      POSTGRES_PASSWORD: example
    volumes:
      - postgres-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres -d my_db"]
      interval: 5s
      timeout: 5s
      retries: 5
  # 其他服务配置...
  app:
    build:
      context: .
      dockerfile: ./Dockerfile
    ports:
      - 5000:80
    depends_on:
      db:
        condition: service_healthy # 等待db服务处于健康状态
    # 其他配置...

3. 验证DbContext的注入逻辑

你的Program.cs里的DbContext注入代码看起来没问题,但要确保EnrollAppTesting这个DbContext的构造函数是正确的,必须接受DbContextOptions<EnrollAppTesting>参数:

public class EnrollAppTesting : DbContext
{
    public EnrollAppTesting(DbContextOptions<EnrollAppTesting> options) : base(options)
    {
    }
    // DbSet定义...
}

避免在构造函数里手动硬编码连接字符串,确保完全依赖配置注入。

4. 测试容器间的网络连通性

如果前面的调整都没解决问题,可以进入API容器内部测试和db服务的连通性,确认网络是否正常:

  1. 查看API容器的ID:docker ps
  2. 进入容器:docker exec -it <api-container-id> bash
  3. 安装ping工具(如果容器里没有的话):apt-get update && apt-get install iputils-ping
  4. ping db服务:ping db,如果能通说明网络没问题;如果不通,检查Docker Compose的默认网络是否正常创建。

按照这几步排查,应该就能解决连接字符串未初始化的问题了!

备注:内容来源于stack exchange,提问作者Gr22

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 08:38:05