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

ASP.NET Core 6 Docker容器连接SQL Server失败及外部登录问题求助

问题解决:ASP.NET Core 6容器化连接SQL Server失败及本地访问配置

一、核心错误:登录失败的原因

你当前的连接字符串使用了User Id=admin,但SQL Server Docker镜像默认的管理员账户是sa,你在docker-compose.yml中设置的SA_PASSWORD=abc@345是给sa账户设置的密码,而非自定义的admin账户。这是导致登录失败的直接原因。

修正后的连接字符串

更新appsettings.Development.json中的连接字符串:

"BookStoreContext": "Server=database;Initial Catalog=BookStoreDb;User Id=sa;Password=abc@345;MultipleActiveResultSets=true;TrustServerCertificate=True"

补充说明:添加TrustServerCertificate=True是因为Docker内的SQL Server使用自签名证书,ASP.NET Core默认会验证证书,不加此参数会触发证书验证错误。

二、修正Docker Compose配置问题

你的database服务端口映射配置错误,SQL Server容器内部默认监听1433端口,当前映射的1434:1437完全不符合规则,需要修改为:

ports:
  - "1434:1433" # 主机1434端口映射到容器默认的1433端口

三、处理容器启动顺序的坑

depends_on: - database仅能保证book-store容器在database容器之后启动,但无法确保SQL Server服务已经完全就绪。如果应用启动时数据库还在初始化,仍会出现连接失败。可以在ASP.NET Core中添加连接重试逻辑:
在Program.cs配置DbContext时加入重试策略:

builder.Services.AddDbContext<BookStoreContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("BookStoreContext"),
        sqlOptions => sqlOptions.EnableRetryOnFailure(
            maxRetryCount: 5,
            maxRetryDelay: TimeSpan.FromSeconds(30),
            errorNumbersToAdd: null)));

四、本地访问Docker内的SQL Server实例

使用本地SQL Server管理工具(如SSMS)连接时:

  • 服务器名称填写:localhost,1434
  • 认证方式选择SQL Server身份验证
  • 用户名输入sa,密码填写你设置的abc@345

额外注意事项

  1. 如果BookStoreDb数据库在Docker的SQL Server中尚未存在,可通过两种方式解决:
    • 手动在SSMS中连接Docker实例后创建数据库
    • 在开发环境中使用EF Core的EnsureCreated()或迁移脚本自动创建
  2. 确保密码符合SQL Server复杂度要求:至少8位,包含大小写字母、数字和特殊字符(你的abc@345已符合要求)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:26:00