Sql server Can';无法从.net核心应用程序连接到SQL Server

Sql server Can';无法从.net核心应用程序连接到SQL Server,sql-server,docker,asp.net-core,.net-core,Sql Server,Docker,Asp.net Core,.net Core,我在Docker上安装了SQL Server。我无法从.NET核心应用程序连接到它 例如,在运行时 dotnet ef database update 我得到这个错误 建立与SQL Server的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。(提供程序:TCP提供程序,错误:35-捕获到内部异常) appsettings.json: { "ConnectionStrings":

我在Docker上安装了SQL Server。我无法从.NET核心应用程序连接到它

例如,在运行时

dotnet ef database update
我得到这个错误

建立与SQL Server的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。(提供程序:TCP提供程序,错误:35-捕获到内部异常)

appsettings.json

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=localhost;Database=myDb;User=sa;Password=reallyStrongPwd123"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}
dockerfile

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
EXPOSE 1443
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY testProj/TestProj.csproj TestProj/
RUN dotnet restore "testproj/TestProj.csproj"
COPY . .
WORKDIR "/src/testProj"
RUN dotnet build "TestProj.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "TestProj.csproj" -c Release -o /app/publish

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

在dockerfile中设置环境

ENV ASPNETCORE_ENVIRONMENT Development
您必须拥有appsettings.Development.json,并且在StartUp.cs中加载如下文件

public Startup(IConfiguration configuration, IWebHostEnvironment env)
        {
            
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddEnvironmentVariables();
            
        }


在dockerfile中设置环境

ENV ASPNETCORE_ENVIRONMENT Development
您必须拥有appsettings.Development.json,并且在StartUp.cs中加载如下文件

public Startup(IConfiguration configuration, IWebHostEnvironment env)
        {
            
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddEnvironmentVariables();
            
        }


当您在容器中运行应用程序时,您的应用程序将与主机隔离。因此,如果在主机上运行sql server,则可以使用docker run--network=“host”命令运行应用程序容器。或者您可以使用docker compose来代替下面的内容

mydbserver:
    container_name: mydbserver
    image: "mcr.microsoft.com/mssql/server"
    restart: always
    environment:
        SA_PASSWORD: "Your_password123"
        ACCEPT_EULA: "Y"
    volumes:
        - your_path:/...wherever you want to mount...

myapp:
    container_name: myapp
    image: myapp
    restart: always
    depends_on: 
        - mydbserver
    links:
        - mydbserver
    volumes:
        - your_path:/...wherever you want to mount...
如果您像上面那样运行应用程序和数据库,您可以在连接字符串的“服务器”部分中使用“mydbserver”来连接sql Server


您可以在中找到所有这些信息。

当您在容器中运行应用程序时,您的应用程序与主机隔离。因此,如果在主机上运行sql server,则可以使用docker run--network=“host”命令运行应用程序容器。或者您可以使用docker compose来代替下面的内容

mydbserver:
    container_name: mydbserver
    image: "mcr.microsoft.com/mssql/server"
    restart: always
    environment:
        SA_PASSWORD: "Your_password123"
        ACCEPT_EULA: "Y"
    volumes:
        - your_path:/...wherever you want to mount...

myapp:
    container_name: myapp
    image: myapp
    restart: always
    depends_on: 
        - mydbserver
    links:
        - mydbserver
    volumes:
        - your_path:/...wherever you want to mount...
如果您像上面那样运行应用程序和数据库,您可以在连接字符串的“服务器”部分中使用“mydbserver”来连接sql Server


您可以在中找到所有这些信息。

是否设置了ASPNETCORE\u环境?您是只有appsettings.json,还是像appsettings.Development一样也有appsettings.your environment name.json。json@NAS我不。我会创造它。ThanksI更新了答案您是否设置了ASPNETCORE_环境?您是只有appsettings.json,还是像appsettings.Development一样也有appsettings.your environment name.json。json@NAS我不。我会创造它。ThanksI更新了答案并做了相应的操作,但问题仍然存在。您是否也更改了DefaultConnection?当前它在您的localhost上尝试将localhost更改为docker服务器名称,但您没有在startup.cs中设置连接字符串吗?public void ConfigureServices(IServiceCollection services){services.AddDbContext(options=>options.UseSqlServer(Configuration.GetConnectionString(“您的连接字符串名称”);}是。它看起来像->string connectionString=Configuration[“connectionString:DefaultConnection”];services.AddDbContext(options=>options.UseSqlServer(connectionString));做了相应的操作,但问题仍然存在。您是否也更改了默认连接?当前,您的本地主机上的它尝试将本地主机更改为docker服务器名称,但未成功。您在startup.cs?public void ConfigureServices中设置了连接字符串(IServiceCollection服务){services.AddDbContext(options=>options.UseSqlServer(Configuration.GetConnectionString(“您的连接字符串名称”);}是的。它看起来像->字符串connectionString=Configuration[“connectionString:DefaultConnection”];services.AddDbContext(options=>options.UseSqlServer(connectionString));