【问题标题】:How to access SQL server from docker ASP.net core API image如何从 docker ASP.net 核心 API 映像访问 SQL 服务器
【发布时间】:2020-07-15 07:02:14
【问题描述】:

感谢 Visual Studio,我已经为带有单页应用程序的 asp.net 核心 API 生成了一个 docker 文件。在网络上进行了一些研究后,我在这个 docker 文件中更正了关于 SPA 的不同问题。 最后我的问题是与我们的数据库服务器的连接。

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

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

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

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

谢谢大家

版本:

  • .net 核心 api : 3.1
  • 我正在为 Windows 使用 docker
  • 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"]

这是我的 docker-compose

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

【问题讨论】:

    标签: sql-server docker asp.net-core-webapi


    【解决方案1】:

    我也遇到了这个问题,只是尝试连接到我的本地主机开发 SQL Server。 最终的工作是将普通的 SQL Server 端口添加到我的 Dockerfile:

    EXPOSE 1433
    EXPOSE 5000 [or whatever other ports you may be using.] 
    

    然后设置防火墙入站规则以允许这些端口。 您显然不能使用“localhost”,因为“localhost”是运行它的容器的主机,但我至少在 Windows 中确实发现,我可以简单地使用我的开发机器名称作为服务器,所以 DNS 似乎可以工作在整个国家。我认为您此时应该能够访问任何网络资源,但我会说您的防火墙 [s] 可能是一个开始的地方。您的 Docker 容器就像一个外部网络,因此通常不受信任。

    我还发现我没有“桥接”网络。也许您可以通过 Linux 容器来实现这一点。 我的 >docker network ls 命令显示了“默认交换机”网络,但没有“网桥”。因为这是 Docker for Windows,所以没有“主机”选项。

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

    【讨论】:

      【解决方案2】:

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

      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 服务器,但这不是我需要的。我需要访问托管在另一台服务器而不是 docker 映像中的我的 SQL 服务器。
      • 您是否尝试在您的 appsettings.json 中添加 SQL 数据库连接字符串?
      • 然后在你的Startup.cs中ConfigureServices方法services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("MssqlConnectionString")));添加这个配置
      猜你喜欢
      • 2020-09-26
      • 1970-01-01
      • 2019-12-19
      • 2021-10-08
      • 2022-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多