Docker Compose部署Blazor应用时SQL Server连接错误求助
问题解决:Blazor Server + Docker SQL Server 连接失败
核心问题定位
- 容器间连接字符串端口错误:应用容器尝试用宿主机映射端口
8002访问数据库容器,而非容器内部端口1433 - 目标数据库
NAMEdb未创建或卷数据损坏 - 本地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报错提示数据库不存在,需手动创建:
- 进入SQL Server容器终端:
docker exec -it NAME.db /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 你的SA密码 - 执行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
相关产品推荐
相关产品推荐

