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

Docker中ASP.NET Core容器无法连接SQL Server容器问题求助

问题分析与解决方案

核心原因

应用容器内的127.0.0.1指向的是容器自身的回环接口,而非宿主机上运行的SQL Server容器,导致连接失败。

解决方案

方法1:使用Docker自定义网络(推荐,容器间通信更稳定)

  1. 创建自定义Docker网络
docker network create ems-network
  1. 重新启动SQL Server容器并加入该网络
docker run -i -p 2019:1433 -e ACCEPT_EULA=Y -e MSSQL_SA_PASSWORD=mypass@wo0rd --network ems-network --name sql-server -d mcr.microsoft.com/mssql/server:2019-latest
  1. 修改应用的连接字符串,将Server值改为SQL Server容器的名称+默认端口:
Server = sql-server,1433; Database = EMS_TrafficRecord_DB; User Id=SA; Password=mypass@wo0rd; MultipleActiveResultSets = true;
  1. 重新构建应用镜像,并启动应用容器时加入同一个网络:
docker build . -t ems-t-r-s -f Dockerfile
docker create -p 3001:80 --network ems-network --name ems-trs ems-t-r-s

方法2:使用宿主机IP地址(适合快速测试)

  1. 查找宿主机的局域网IP:
    • Windows:执行ipconfig,找到本地网卡的IPv4地址(如192.168.3.10)
    • Mac/Linux:执行ip addr(或ifconfig),找到本地网卡的IPv4地址
  2. 修改连接字符串中的127.0.0.1为宿主机IP:
Server = 192.168.3.10,2019; Database = EMS_TrafficRecord_DB; User Id=SA; Password=mypass@wo0rd; MultipleActiveResultSets = true;
  1. 重新构建镜像并启动容器。

方法3:使用Docker Desktop特殊DNS(仅Windows/Mac环境)

Docker Desktop提供了host.docker.internal作为宿主机的别名,直接修改连接字符串:

Server = host.docker.internal,2019; Database = EMS_TrafficRecord_DB; User Id=SA; Password=mypass@wo0rd; MultipleActiveResultSets = true;

额外检查项

  • 确认SQL Server容器已正常启动:执行docker ps查看容器状态
  • 确认数据库EMS_TrafficRecord_DB已在SQL Server中创建
  • 确认SA密码与连接字符串中的一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:55:20