Sql server 如何从docker ASP.net核心API映像访问SQL server

Sql server 如何从docker ASP.net核心API映像访问SQL server,sql-server,docker,asp.net-core-webapi,Sql Server,Docker,Asp.net Core Webapi,感谢Visual studio,我为asp.net核心API生成了一个docker文件,其中包含一个单页应用程序。在网上做了一些研究之后,我纠正了这个docker文件中关于SPA的不同问题。 最后,我的问题是与数据库服务器的连接 当我尝试连接时,我有一个 Microsoft.Data.SqlClient.SqlException:建立到SQL Server的连接时发生与网络相关或特定于实例的错误 这似乎是因为我的容器无法访问服务器,经过一个小时又一个小时的谷歌搜索,我只找到了在docker映像中

感谢Visual studio,我为asp.net核心API生成了一个docker文件,其中包含一个单页应用程序。在网上做了一些研究之后,我纠正了这个docker文件中关于SPA的不同问题。 最后,我的问题是与数据库服务器的连接

当我尝试连接时,我有一个

Microsoft.Data.SqlClient.SqlException:建立到SQL Server的连接时发生与网络相关或特定于实例的错误

这似乎是因为我的容器无法访问服务器,经过一个小时又一个小时的谷歌搜索,我只找到了在docker映像中托管SQL的解决方案

如何将wab应用程序的所有docker映像访问整个公司网络以访问不同的服务器?我使用计算机名ant而不是IP来符合公司要求

谢谢大家

版本:

  • .net核心api:3.1
  • 我正在使用docker for Windows
  • docker使用linux容器
这是我的docker文件

   #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

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
RUN apt-get update -yq \
    && apt-get install curl gnupg -yq \
    && curl -sL https://deb.nodesource.com/setup_10.x | bash \
    && apt-get install nodejs -yq
WORKDIR /src
COPY ["Company.Dtm.WebApi.AppWebApi/Company.Dtm.WebApi.AppWebApi.csproj", "Company.Dtm.WebApi.AppWebApi/"]
COPY ["CompanyFramework/Company.Framework.WebApi/Company.Framework.WebApi.csproj", "CompanyFramework/Company.Framework.WebApi/"]
COPY ["CompanyFramework/Company.Framework.Model/Company.Framework.Model.csproj", "CompanyFramework/Company.Framework.Model/"]
COPY ["CompanyFramework/Company.Framework.Tools/Company.Framework.Tools.csproj", "CompanyFramework/Company.Framework.Tools/"]
COPY ["AppLib/Company.Dtm.Lib.AppLib/Company.Dtm.Lib.AppLib.csproj", "AppLib/Company.Dtm.Lib.AppLib/"]
RUN dotnet restore "Company.Dtm.WebApi.AppWebApi/Company.Dtm.WebApi.AppWebApi.csproj"
COPY . .
WORKDIR "/src/Company.Dtm.WebApi.AppWebApi"
RUN dotnet build "Company.Dtm.WebApi.AppWebApi.csproj" -c Debug -o /app/build

FROM build AS publish
RUN dotnet publish "Company.Dtm.WebApi.AppWebApi.csproj" -c Debug -o /app/publish

FROM base AS final
WORKDIR /app

COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Company.Dtm.WebApi.AppWebApi.dll"]
这是我的码头工人

version: '3'
services:
  webapp:
    build: .
    network_mode: "bridge"
    ports:
     - "8880:80"

您需要在撰写文件中为数据库添加另一项服务。 大概是这样的:

version: "3"
  services:
    web:
        build: .
        ports:
            - "8000:80"
        depends_on:
            - db
    db:
        image: "mcr.microsoft.com/mssql/server"
        environment:
            SA_PASSWORD: "Your_password123"
            ACCEPT_EULA: "Y"

确保替换
db

下的
SA_password
环境变量中的密码。我也遇到了这个问题,只是尝试连接到我的本地主机开发SQL Server。 最终成功的是将普通SQL Server端口添加到我的Dockerfile中:

EXPOSE 1433
EXPOSE 5000 [or whatever other ports you may be using.] 
然后设置防火墙入站规则以允许这些端口。 显然,您不能使用“localhost”,因为“localhost”是运行它的容器所在的主机,但我发现至少在Windows中,我可以简单地使用我的dev机器名作为服务器,因此DNS似乎可以跨nat工作。我认为您应该能够访问任何网络资源,但我认为您的防火墙可能是一个起点。Docker容器的行为类似于外部网络,因此通常不受信任

我还发现我没有一个“桥梁”网络。也许你可以通过Linux容器得到它。 My>docker network ls命令显示了一个“默认交换机”网络,但没有“网桥”。因为这是Docker for Windows,所以没有“主机”选项


这就是我的全部。我看到很多其他帖子都在谈论很多其他的事情,但老实说,打开防火墙才是关键所在。祝你好运

嗨,谢谢你的回答。但它似乎在另一个容器中添加了SQL server,但这不是我需要的。我需要访问托管在另一台服务器而不是docker映像中的SQL server。您是否尝试在appsettings.json中添加SQL数据库连接字符串?然后在ConfigureServices方法
services.AddDbContext(options=>options.UseSqlServer(configuration.GetConnectionString)中的Startup.cs中添加此配置(“MSSQLSconnectionString”);