繁体   English   中英

从在 Docker Windows 容器中运行的 .Net 4.8 控制台应用程序连接到本地 SQL Server

[英]Connect to local SQL Server from .Net 4.8 Console Application Running in Docker Windows container

我有一个在 .NET 4.8 Framework 上运行的示例控制台应用程序。 应用程序能够连接本地 SQL Server。 但是当我在 docker 容器中运行应用程序时,我无法在应用程序和 SQL Server 之间建立连接。

谁能帮我解决一下?

这是我的代码:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("I am inside Docker!!!!");
        TestDBConnection();
        Console.ReadLine();
        Console.WriteLine("End");
    }

    public static void TestDBConnection()
    {
        try
        {
            SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
            Console.WriteLine("I am inside Docker!!!");

            Console.WriteLine("Connecting to Local DB");
            using (SqlConnection connection = new SqlConnection("Server=172.23.128.1\\LOCALHOST, 49172;Initial Catalog=config;User ID=sa;Password=Compusol@123;MultipleActiveResultSets=False;Encrypt=True;Connection Timeout=30;"))
            {
                connection.Open();
                Console.WriteLine("Connected to Local DD open");                    
            }
        }
        catch (SqlException e)
        {
            Console.WriteLine(e.ToString());
        }

        Console.WriteLine("\nDone. Press enter.");
        Console.ReadLine();
    }
}

Docker 引擎 v20.10.14

码头工人文件

FROM mcr.microsoft.com/dotnet/framework/runtime:4.8 AS runtime
WORKDIR /app
COPY . .
ENTRYPOINT ["DockerTestConnection.exe"]

我正在发布应用程序并在发布的文件夹中运行 Docker。 Publish 文件夹将包含所有应用程序依赖项。

当您在容器中运行应用程序时,最好使用 FQDN 而不是 IP 地址来连接到您的主机服务器实例。 根据您的特定设置、主机操作系统和其他因素,该名称可能会有所不同。 在 Windows 上,它是 {hostname}.mshome.net(或类似的东西)。 然后,您的连接请求将被路由到“Doc​​ker IP”地址上的主机。 您应该考虑阅读有关容器化世界中可用的不同网络和路由选项的信息。

例如,您的 HOST 可能具有 IP 地址 172.23.128.1。 但它也会在 vEthernet 适配器上有额外的 IP,您应该使用该 IP。

首先,您需要检查网络类型,我假设它是“NAT 网络”,因为根据网络类型,无法连接,然后您需要验证容器和 sql 服务器之间的连接。 如果您不使用 sql server 的 1433 端口,则运行此命令更改 IP 地址和端口

Test-NetConnection -ComputerName xx.xxx.xx.xx -Port 1433 -InformationLevel "Detailed"

那么如果测试成功,那么问题是关于连接字符串,您可以使用此模板,它适用于 mer:

"Server=xx.xxx.xx.xx\\MSSQLSERVER,1433;Initial Catalog=dbname;User Id=xxxx;Password=xxxxx;"

请验证您正在使用的 sqlserver 实例,因为我认为实例名称默认不是 localhost 它是MSSQLSERVER

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM