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

Docker化.NET 6 API无法连接SQL Server容器问题求助

解决ASP.NET Core 6 API容器无法连接SQL Server容器的问题

针对你遇到的API容器无法连接同docker-compose下SQL Server容器的问题,以下是几个关键排查和解决步骤:

1. 在连接字符串中添加证书信任参数

容器内的SQL Server默认使用自签名证书,.NET Core客户端默认会验证证书有效性,这会导致连接失败。修改docker-compose.yml中的连接字符串,添加TrustServerCertificate=True:

environment:
  - ConnectionStrings__UserDbConnection=Server=sqlserver;Database=UserDB;User=sa;Password=YourPassword123;TrustServerCertificate=True;

2. 验证目标数据库是否存在

API尝试连接的UserDB数据库可能并未在SQL Server容器中创建。进入SQL Server容器执行以下命令检查:

# 进入SQL Server容器
docker exec -it <sqlserver-container-id> /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P YourPassword123
# 在sqlcmd中执行查看数据库列表
SELECT name FROM sys.databases;
GO

如果UserDB不存在,你可以选择:

  • 在API启动逻辑中添加EF Core迁移自动创建数据库(确保代码包含context.Database.Migrate()逻辑)
  • 或者给SQL Server容器挂载初始化SQL脚本,容器启动时自动执行(将脚本放在本地目录,通过volumes挂载到容器的/opt/mssql/scripts路径)

3. 确认API容器已正确加载环境变量

进入API容器,检查环境变量是否正确传入:

docker exec -it <userapi-container-id> printenv

查找ConnectionStrings__UserDbConnection是否存在且值正确。Linux容器中,.NET Core通过双下划线__解析层级配置,该格式是正确的,若未加载到变量,可检查docker-compose.yml的语法是否有误。

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

在API容器内测试与SQL Server容器的网络连通性:

# 进入API容器
docker exec -it <userapi-container-id> bash
# 安装telnet(若容器未预装)
apt-get update && apt-get install -y telnet
# 测试1433端口连通性
telnet sqlserver 1433

如果telnet无法连接,可手动指定docker-compose网络来修复:

version: '1.0'

networks:
  app-network:
    driver: bridge

services:
  userapi:
    ...
    networks:
      - app-network
    ...
  sqlserver:
    ...
    networks:
      - app-network
    ...

5. 检查SQL Server容器的SA密码有效性

查看SQL Server容器日志,确认SA密码是否符合复杂度要求并被正常接受:

docker logs <sqlserver-container-id>

若日志中有密码相关错误,修改SA_PASSWORD为符合要求的密码(至少8位,包含大小写字母、数字、特殊字符)后重启容器。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 00:37:33