2017-09-25 4 views
0

Windows 10マシンにSQL Server 2016 Express、ドッカーfor WindowsおよびIISがインストールされています。ドックで実行している.netコアアプリケーションからSQL Server expressに接続できません

SQL Server Expressは、1455ポートでリッスンするように構成されています。 Northwindサンプルデータベースがあります。

Windowsファイアウォールは無効です。

Ipconfigは、次のことを示しています

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コンソールアプリケーションを作成します。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(); 
     } 
    } 
} 

を。しかし、私はドッカーサポートを追加し、それを実行すると、TestHttp方法は、[OK]を動作しますが、私は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に接続するために何をすべきアイナー?

編集:

回答:Windowsファイアウォールを無効にするときは注意してください。

私はWindowsファイアウォールをオフにしましたが、ドメインネットワークでのみオフにしました。 Windowsでは、DockerNATアダプタがパブリックネットワークとして認識されます。したがって、WindowsファイアウォールはSQL Serverへの接続をブロックしていました。

パブリックネットワークでWindowsファイアウォールを無効にしました。今すぐ接続できます。

+0

私はこの同じ問題に取り組んでいます。私はあなたより少し遠いですが、まだまだ立ち往生しています。この記事をチェックしてください。 https://docs.docker.com/compose/aspnet-mssql-compose/ – JasonlPrice

+0

@JasonlPrice。しかし、この記事では、ドッカーコンテナでLinux用SQL Serverを実行する方法について説明します。 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メソッドでも失敗しました。 –

関連する問題