Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何从.net Core Linux Docker容器(使用Docker for Windows)连接到internet上的Sql Server?_Sql Server_Docker - Fatal编程技术网

Sql server 如何从.net Core Linux Docker容器(使用Docker for Windows)连接到internet上的Sql Server?

Sql server 如何从.net Core Linux Docker容器(使用Docker for Windows)连接到internet上的Sql Server?,sql-server,docker,Sql Server,Docker,我们正在尝试从Docker容器中访问远程网络上的Sql Server数据库。但是,每次尝试连接都会挂起应用程序(没有异常,没有超时,只有无休止的等待) 通过创建一个新的.Net Core 3.1控制台应用程序并添加此代码(将包引用添加到Microsoft.Data.SqlClient),可以很容易地进行复制: 现在,当我们作为控制台EAPP1-配置文件启动项目时,连接按预期进行。当使用Docker-profile启动项目时,应用程序只挂起wait connection.OpenAsync()呼叫

我们正在尝试从Docker容器中访问远程网络上的Sql Server数据库。但是,每次尝试连接都会挂起应用程序(没有异常,没有超时,只有无休止的等待)

通过创建一个新的.Net Core 3.1控制台应用程序并添加此代码(将包引用添加到Microsoft.Data.SqlClient),可以很容易地进行复制:

现在,当我们作为
控制台EAPP1
-配置文件启动项目时,连接按预期进行。当使用
Docker
-profile启动项目时,应用程序只挂起
wait connection.OpenAsync()呼叫

没有例外或任何事情。它只是没有连接,只是无限期地坐在那里

我意识到在Windows机器上运行Linux容器需要各种魔法,但是创建一个外部页面的webrequest确实有效。这给我的印象是,它与端口号或与Sql Server连接的性质有关


任何帮助都将不胜感激。

事实证明,新版的
mcr.microsoft.com/dotnet/core/runtime:3.1-buster-slim
源映像对TLS/密码的使用更加严格

这与SqlClient中的错误一起导致了这种行为。事实证明,这个问题和各种解决方案/变通方法在SqlClient存储库中得到了广泛的讨论:

using System;
using System.Threading.Tasks;
using Microsoft.Data.SqlClient;

namespace ConsoleApp1
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var connStr = "Data Source=<public server ip>,1433;Integrated Security=False;Initial Catalog=TestDatabase;User ID=user;Password=password";
            await using var connection = new SqlConnection(connStr);

            await connection.OpenAsync();

            Console.WriteLine("Hello World!");
        }
    }
}
#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/runtime:3.1-buster-slim AS base
WORKDIR /app

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["ConsoleApp1/ConsoleApp1.csproj", "ConsoleApp1/"]
RUN dotnet restore "ConsoleApp1/ConsoleApp1.csproj"
COPY . .
WORKDIR "/src/ConsoleApp1"
RUN dotnet build "ConsoleApp1.csproj" -c Release -o /app/build

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

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