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

Docker Compose部署Blazor应用时SQL Server连接错误求助

问题解决:Blazor Server + Docker SQL Server 连接失败

核心问题定位

  1. 容器间连接字符串端口错误:应用容器尝试用宿主机映射端口8002访问数据库容器,而非容器内部端口1433
  2. 目标数据库NAMEdb未创建或卷数据损坏
  3. 本地SQL Express可能间接影响容器数据卷或网络状态

具体解决方案

1. 修正容器内应用的连接字符串

Docker Compose服务处于同一内部网络,应用容器需通过数据库服务名+容器内部端口访问SQL Server,而非宿主机映射端口。修改docker-compose-override.yml:

version: '3.4'

services:
  NAME.webapp:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ConnectionStrings__DefaultConnection=Server=NAME.db,1433;Database=NAMEdb;User Id=sa;Password=********;Encrypt=False
    ports:
      - "80"

2. 创建缺失的NAMEdb数据库

DBeaver报错提示数据库不存在,需手动创建:

  1. 进入SQL Server容器终端:
    docker exec -it NAME.db /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 你的SA密码
    
  2. 执行SQL创建数据库:
    CREATE DATABASE NAMEdb;
    GO
    

也可在Blazor应用中通过EF Core的EnsureCreated()或迁移自动初始化数据库。

3. 清理并重建数据库数据卷

旧卷可能存在数据损坏,彻底重置SQL Server实例:

# 停止容器并删除卷
docker-compose down -v
# 重新构建并启动容器
docker-compose up -d --build

重置后需重新创建NAMEdb数据库。

4. 排查本地SQL Server干扰

停止本地SQL Server (SQLEXPRESS)服务,避免潜在网络或资源冲突:

  • 打开SQL Server配置管理器,找到SQL Server服务,右键SQL Server (SQLEXPRESS)选择停止
  • 重启Docker Desktop后重新启动容器

5. 验证DBeaver连接配置

确保DBeaver使用正确参数连接容器内SQL Server:

  • 主机:localhost
  • 端口:8002(宿主机映射端口)
  • 数据库:NAMEdb(需已创建)
  • 认证:SQL Server认证
  • 用户名:sa
  • 密码:设置的SA密码
  • 选项:勾选禁用加密

内容的提问来源于stack exchange,提问作者YHabib

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:53:15