我有一个 .NET 应用程序正在尝试连接到在 Docker 容器中运行的 SQL Server 实例。我使用 Docker Compose 来管理我的服务,其中包括我的 .NET 应用程序和 SQL Server。
这是我的
docker-compose.yml
的相关部分:
version: '3.4'
services:
producttest2git:
build:
context: .
dockerfile: ProductTest2Git/Dockerfile
networks:
- myAppNetwork
SqlServerDb:
container_name: SqlServerContainer
image: mcr.microsoft.com/mssql/server:2019-latest
ports:
- 8002:1433
environment:
- ACCEPT_EULA=Y
- MSSQL_SA_PASSWORD=Admin0147
networks:
- myAppNetwork
WebApi:
container_name: producttest2gitcontainer
image: producttest2git
ports:
- 8001:80
build:
context: .
dockerfile: ProductTest2Git/Dockerfile
depends_on:
- SqlServerDb
networks:
- myAppNetwork
networks:
myAppNetwork:
这是我的
connection string
:
"ConnectionStrings": {
"DefaultConnection": "Server=SqlServerDb;Database=ProjectTestGit2; User Id=sa;Password=Admin0147;"
}
例如,当我尝试从 .NET 应用程序连接到 SQL Server 时,出现以下错误:
Microsoft.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 40 - Could not open a connection to SQL Server)
我尝试了以下方法,但没有一个起作用:
1- 检查连接字符串中的服务器名称。
2- 确保 SQL Server Docker 容器正在运行。
3- 检查所有服务是否位于同一 Docker 网络上。
4- 检查防火墙规则。
5-尝试使用 Entity Framework Core 迁移来创建数据库。
6-我可以使用用户 ID(sa)、密码(Admin0147)和服务器名称(localhost、8002)访问 SQL SERVER 管理工作室
如有任何帮助,我们将不胜感激!
docker compose 服务的名称,例如
SqlServerDb
,通常在服务外部不为人所知,并且与主机名不同。它们基本上只是撰写文件中的标识符,例如如果您使用 depends_on
。
这就是
Server=SqlServerDb
无法连接数据库的原因。
您可以在此处使用
Server=localhost
(这是首选方法),或者为 SqlServerDb
服务设置主机名。
services:
SqlServerDb:
container_name: SqlServerContainer
hostname: SqlServerDb
image: mcr.microsoft.com/mssql/server:2019-latest
ports:
- 8002:1433
environment:
- ACCEPT_EULA=Y
- MSSQL_SA_PASSWORD=Admin0147
networks:
- myAppNetwork