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

Docker部署ASP.NET Core 8 API无法连接SQL Server Express问题

ASP.NET Core 8 Web API Docker部署后无法连接SQL Server Express问题排查与解决

我开发了一个ASP.NET Core 8 Web API,本地通过HTTPS运行时能正常连接SQL Server Express,但用Docker或Docker Compose部署后,API可以启动却无法连接数据库。相关配置及已知条件如下:

现有配置

Dockerfile

FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./Euro_WeatherForecast.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Euro_WeatherForecast.dll"] 

docker-compose.yaml

version: '3.4'

services:
  euro_weatherforecast:
    image: ${DOCKER_REGISTRY-}euroweatherforecast
    build:
      context: .
      dockerfile: Euro_WeatherForecast/Dockerfile

连接字符串

"ConnectionStrings": {
    "AppDbContext": "server=sqlserver;port=8080;Data Source=TUF1\\SQLEXPRESS;Initial Catalog=Euronext_WeatherForecast;Integrated Security=True;Encrypt=False"
}

已知条件:容器已正常运行,SQL Server和SQL Server Browser服务处于运行状态,防火墙已关闭。

问题排查与解决步骤

1. 修正连接字符串的地址冲突与网络访问问题

Docker容器处于独立网络环境,无法直接通过本地机器名TUF1\\SQLEXPRESS访问宿主SQL Server,且连接字符串中server与Data Source参数冲突,需调整:

  • Windows环境:将Data Source替换为host.docker.internal\\SQLEXPRESS(Docker提供的宿主机器默认别名)
  • Linux/macOS环境:替换为宿主机器的局域网IP,例如192.168.1.100\\SQLEXPRESS
  • 删除冗余的server=sqlserver;port=8080部分,SQL Server Express默认端口为1433(未修改的情况下),调整后的示例:
"ConnectionStrings": {
    "AppDbContext": "Data Source=host.docker.internal\\SQLEXPRESS;Initial Catalog=Euronext_WeatherForecast;Integrated Security=True;Encrypt=False;TrustServerCertificate=True"
}

2. 调整身份验证方式

Integrated Security=True依赖Windows集成认证,容器内进程无法直接使用宿主Windows凭证,建议改用SQL Server身份认证:

  • 在SQL Server中创建具备数据库读写权限的SQL登录账号
  • 修改连接字符串为:
"ConnectionStrings": {
    "AppDbContext": "Data Source=host.docker.internal\\SQLEXPRESS;Initial Catalog=Euronext_WeatherForecast;User ID=你的SQL账号;Password=你的SQL密码;Encrypt=False;TrustServerCertificate=True"
}

3. 确保SQL Server允许远程连接

  • 打开SQL Server配置管理器,进入SQL Server网络配置 -> SQLEXPRESS的协议,启用TCP/IP
  • 双击TCP/IP,在IP地址选项卡的IPAll部分,设置TCP端口为1433
  • 重启SQL Server服务和SQL Server Browser服务

4. 验证Docker网络访问性

默认的Docker bridge网络已支持容器访问host.docker.internal,无需额外配置;若使用自定义网络,确认网络规则未限制宿主机器访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 19:52:45