2016-11-22 32 views
0

linuxドッカーコンテナ内でWebサーバーを実行しています。私はローカルのSQL Serverに接続にエラーが発生し、次のウィンドウズ10のホスト上で実行する場合:私は、ウェブサーバをデバッグするときホストのdockerコンテナからSQL Serverへの接続文字列

"ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=MyAppDb;User ID=test;Password=test;", 

Microsoft.EntityFrameworkCore.Query.Internal.SqlServerQueryCompilationContextFactory[1] 
    An exception occurred in the database while iterating the results of a query. 
    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: 25 - Connection string is not valid) ---> System.Net.Internals.SocketExceptionFactory+ExtendedSocketException: No such device or address... 

JSON内の接続文字列は次のようになります同じ接続文字列を持つVisual Studioでは、それは動作します。だから私は理解していない、なぜドッカーがConnection string is not validエラーをスローします。

Webサーバーは.NET Core 1.1を使用しているため、thisという名前のSQL Serverインスタンスに接続することは機能するはずです。私は2つのSQL Serverインスタンスがインストールされています。 linuxドッカーがサポートしていないので、名前付きパイプとの接続は機能しません。それは、ホストコンピュータと同じネットワーク環境を持っている必要がありますので

私は、コンテナのネットワークモードのホストを使用します。

docker run --rm -it --name MyApp -v c:\users\myself\MyApp.json:/app/appsettings.json --network="host" MyAppImage 

は誰も考えていますか?

+0

Webサーバーに['LocalDb'](https://msdn.microsoft.com/en-us/library/hh510202.aspx)がインストールされていますか? – DavidG

+0

コンテナはローカルホスト上ではなく、異なるIP上にあるため、ローカルマシン上でdbサーバを実行している場合は、データベースサーバのTCP/IPネットワーキングを有効にする必要があります。また、HOSTNAMEまたはホスト環境のIP ...これは理想的には環境変数を介して入力する必要があります。 – Tracker1

+0

@DavidG:LocalDbはWindows 10ホストマシン上で動作します。 – gumo

答えて

1

私はコンテナのネットワークモードのホストを使用するので、私は正しくこの文を理解していれば、これはあなたがそれを考えて何をしません

それは、ホストコンピュータと同じネットワーク環境が必要ですそうです。コンテナは、ホストと同じネットワーク環境を持ちます。しかし、ホストは物理マシンではなく、DockerがLinuxコンテナを実行するために作成するVMです。 Hyper-Vネットワーキングhereのより包括的な説明があります。 以下の図は、赤枠のネットワークカードがあなたのマシンは、Windows用ドッカーが作成する仮想スイッチに接続するために使用するものであるその記事から1

Docker on windows networking

に基づいています。青で囲まれたネットワークカードは、Linux仮想マシンが同じ仮想スイッチに接続するために使用するカードです。また、ホストネットワーキングを使用しているときにコンテナに表示されるカードです。

アプリケーションがコンテナで実行されている場合は、ネットワーク経由でデータベースに接続する必要があります。 This articleは、WindowsでDocker Composeを使用してマルチコンテナアプリケーションを構築する方法について話しています。作成者はWindowsコンテナを使用していますが、データベースコンテナとそれらをリンクするためのWebコンテナと接続文字列を作成する例であるdocker-compose fileを提供しています。

また、NerdDinnerアプリケーションをドッキングするのには、ステップバイステップウォークスルーがあります。 Part 2は、アプリケーションをlocaldbからコンテナ化されたSQL Serverに変換する手順を説明しています。

+0

ホストに関する洞察に感謝します。それから、@ Tracker1が示唆するように、IPまたはホスト名で接続する必要があることは明らかです。 SQL Serverのコンテナ化に関しては、このシナリオでは必要ありません。 – gumo

関連する問題