排查ASP.NET Core 8 MVC容器化项目与SQL Server Docker容器连接问题
解决ASP.NET Core 8 MVC容器化连接SQL Server失败问题
核心问题定位
你拉取的是SQL Server镜像,但连接字符串使用了MySQL的配置(3306端口、root用户、mysql-container容器名),这是导致连接失败的首要原因,先修正这个核心矛盾。
步骤1:修正连接字符串
SQL Server默认端口为1433,默认管理员用户是sa,连接字符串需匹配SQL Server的配置规则。假设你运行SQL Server容器的命令为:
docker run -d --name sqlserver-container --network your-network -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=YourStrong!Passw0rd" mcr.microsoft.com/mssql/server:2022-latest
则正确的连接字符串应为:
"ConnectionStrings": { "DefaultConnection": "Server=sqlserver-container,1433;Database=ProductsDB;User Id=sa;Password=YourStrong!Passw0rd;TrustServerCertificate=True;" }
注意:
Server字段中,容器名与端口可用逗号或冒号分隔(如sqlserver-container:1433)- 必须添加
TrustServerCertificate=True,因为容器内SQL Server使用自签名证书,ASP.NET Core默认不信任 - 密码需符合SQL Server复杂度要求(至少8位,包含大小写、数字、特殊字符)
步骤2:检查SQL Server容器状态
用以下命令确认容器是否正常运行:
docker ps
若容器未启动,执行docker start sqlserver-container启动;若启动失败,查看日志排查原因:
docker logs sqlserver-container
重点关注日志中是否有密码不符合要求、端口冲突等提示。
步骤3:验证容器网络连通性
进入ASP.NET Core容器,测试与SQL Server容器的网络连通性:
# 进入ASP.NET Core容器 docker exec -it your-aspnet-container bash # ping SQL Server容器名,确认网络可达 ping sqlserver-container
若ping不通,检查两个容器是否在同一网络:
# 查看SQL Server容器所属网络 docker inspect sqlserver-container | grep Networks # 查看ASP.NET Core容器所属网络 docker inspect your-aspnet-container | grep Networks
若不在同一网络,将ASP.NET Core容器加入目标网络:
docker network connect your-network your-aspnet-container
步骤4:确认目标数据库已存在
SQL Server不会自动创建数据库,需手动创建ProductsDB:
- 进入SQL Server容器的命令行:
docker exec -it sqlserver-container /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P YourStrong!Passw0rd
- 执行创建数据库的SQL语句:
CREATE DATABASE ProductsDB; GO
内容的提问来源于stack exchange,提问作者Usama Ikram
相关产品推荐
相关产品推荐

