2017-09-25 49 views
0

我有SQL Server 2016 Express,用於Windows的docker和安裝在Windows 10機器上的IIS。無法連接到運行在docker上的.net核心應用程序的SQL Server Express。

SQL Server Express配置爲偵聽1455端口。 Northwind示例數據庫就在那裏。

Windows防火牆已禁用。

Ipconfig顯示以下內容:從Visual Studio在Windows上運行時

using System; 
using System.Data.SqlClient; 
using System.Net.Http; 

namespace ConnectSqlServer 
{ 
    class Program 
    { 
     static void TestHttp() 
     { 
      using (var client = new HttpClient()) 
      { 
       var response = client.GetAsync("http://10.0.75.1").Result; 
       var content = response.Content.ReadAsStringAsync().Result; 
       Console.WriteLine(content); 
      } 
     } 

     static void Main(string[] args) 
     { 
      TestHttp(); 
      var cn = new SqlConnection("Data Source=10.0.75.1\\SQLEXPRESS,1455;Initial Catalog=Northwind;User ID=docker;Password=SomeStrongPassword;"); 
      cn.Open(); 
     } 
    } 
} 

該應用程序成功運行:

Ethernet adapter vEthernet (DockerNAT) 2: 

    Connection-specific DNS Suffix . : 
    Link-local IPv6 Address . . . . . : fe80::70f1:3323:a7a8:b7a5%21 
    IPv4 Address. . . . . . . . . . . : 10.0.75.1 
    Subnet Mask . . . . . . . . . . . : 255.255.255.0 
    Default Gateway . . . . . . . . . : 

我在Visual Studio 2017年創造了一個非常簡單的.NET核心2控制檯應用程序。但是,當我加入泊塢窗支持並運行它時,TestHttp方法效果好,但我無法連接到SQL Server時,我得到以下異常:

System.Data.SqlClient.SqlException
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 40 - Could not open a connection to SQL Server)

這是我Dockerfile

FROM microsoft/dotnet:2.0-runtime 
ARG source 
WORKDIR /app 
COPY ${source:-obj/Docker/publish} . 
ENTRYPOINT ["dotnet", "ConnectSqlServer.dll"] 

而且這是我的docker-compose.yml

version: '3' 

services: 

    connectsqlserver: 
    image: connectsqlserver 
    build: 
     context: ./ConnectSqlServer 
     dockerfile: Dockerfile 

我應該怎麼做連接到從.NET核心上的碼頭工人續運行2.0的應用程序在Windows主機上運行的本地SQL Server Express ainer?

編輯:

答:在禁用Windows防火牆時要小心。

我關閉了Windows防火牆,但只在域網絡上。 Windows將DockerNAT適配器視爲公共網絡。所以Windows防火牆阻止了與SQL Server的連接。

我在公共網絡上關閉了Windows防火牆,現在我可以連接了。

+0

我正在處理同樣的問題。我比你遠一點,但仍然卡住了。看看這篇文章。 https://docs.docker.com/compose/aspnet-mssql-compose/ – JasonlPrice

+0

@JasonlPrice。但是那篇文章是爲了在Docker容器上運行SQL Server for Linux。我在Windows主機上運行SQL Server Express。 –

+0

感謝您使用Windows防火牆的提示!那爲我做了。您可能想要自己添加答案,並將其標記爲正確,如果這樣做對您有用。 –

回答

0

您可以嘗試使用網絡模式作爲主機啓動容器。在這種情況下,容器可以使用localhost作爲DNS名稱連接到主機上運行的應用程序。

version: '3' 

services: 
    connectsqlserver: 
    image: connectsqlserver 
    build: 
     context: ./ConnectSqlServer 
     dockerfile: Dockerfile 
    network_mode: "host" 
+0

但我可以連接到主機,我可以訪問IIS,TestHttp工作。 –

+0

我認爲network_mode:「主機」只適用於linux。我嘗試了你的建議,但它不起作用,即使TestHttp方法失敗。 –

相關問題