Docker中ASP.NET Core容器无法连接SQL Server容器问题求助
问题分析与解决方案
核心原因
应用容器内的127.0.0.1指向的是容器自身的回环接口,而非宿主机上运行的SQL Server容器,导致连接失败。
解决方案
方法1:使用Docker自定义网络(推荐,容器间通信更稳定)
- 创建自定义Docker网络
docker network create ems-network
- 重新启动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
- 修改应用的连接字符串,将
Server值改为SQL Server容器的名称+默认端口:
Server = sql-server,1433; Database = EMS_TrafficRecord_DB; User Id=SA; Password=mypass@wo0rd; MultipleActiveResultSets = true;
- 重新构建应用镜像,并启动应用容器时加入同一个网络:
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地址(适合快速测试)
- 查找宿主机的局域网IP:
- Windows:执行
ipconfig,找到本地网卡的IPv4地址(如192.168.3.10) - Mac/Linux:执行
ip addr(或ifconfig),找到本地网卡的IPv4地址
- Windows:执行
- 修改连接字符串中的
127.0.0.1为宿主机IP:
Server = 192.168.3.10,2019; Database = EMS_TrafficRecord_DB; User Id=SA; Password=mypass@wo0rd; MultipleActiveResultSets = true;
- 重新构建镜像并启动容器。
方法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
相关产品推荐
相关产品推荐

