マシンにインストールされているWindows用のdockerがあります。別のVMで実行されているSQL Serverデータベースにアクセスしようとする.net core 1.0.0をターゲットとするコンソールアプリケーションがあります。マシンからSQL Serverを実行しているVMをpingできます。
私のマシンのコマンドプロンプトからdotnet run
を使用してコンソールアプリケーションを実行しようとすると、正常に動作します。しかし、同じアプリケーションがdockerコンテナー内で実行されると、メッセージが表示されます
SQL Serverへの接続を確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからなかったか、アクセスできませんでした。インスタンス名が正しいこと、およびSQL Serverがリモート接続を許可するように構成されていることを確認してください。 (プロバイダー:TCPプロバイダー、エラー:40-SQL Serverへの接続を開けませんでした)
使ってみた
docker run --add-Host sqldemo:<VM running sql server ip here>
しかし、それは違いはありませんでした。
データベースを右クリックして、「プロパティ/セキュリティ/サーバー認証/ SQL ServerおよびWindows認証モード」ラジオボタンを選択します。 MS SQLサービスを再起動します。
例
"ConnectionStrings": {
"DefaultConnection": "Server=YourServerName;Database=YourDatabaseName;MultipleActiveResultSets=true;User Id=UserNameYouJustAdded;Password=PassordYouJustCreated"
},
必ず削除してくださいTrusted_Connection=True
。
私のサンプルDockerファイル
FROM Microsoft/dotnet:nanoserver
ARG source=.
WORKDIR /app
EXPOSE 5000
EXPOSE 1433
ENV ASPNETCORE_URLS http://+:5000
COPY $source .
昇格されたPowerShellのDockerファイルと同じ場所から実行する
dotnet publish
docker build bin\Debug\netcoreapp1.0\publish -t aspidserver
docker run -it aspidserver cmd
コンテナーを実行して、PowerShellで実行中の出力を確認したかったのです。
コマンドプロンプトでコンテナがコンテナ内で起動して実行されると、アプリケーションを開始しました。
dotnet nameOfApplication.dll
すべてが計画どおりに進んだ場合、1つが稼働しているはずです。
ネットワーク設定をHost
に設定してdockerコンテナーを実行できます。このようなコンテナはネットワークスタックをdockerホストと共有し、コンテナの観点からは、localhost(または127.0.0.1)はdockerホストを参照します。
docker run --net=Host ...
次に、ホストから行うのと同じように、Dockerコンテナー内からSQL Serverデータベースを取得する必要があります。
この答えのように
Linux DockerのSQL Serverインスタンス文字列接続
Saurabh Singhによる Microsoftから:
インスタンス名のサポートは、.Net Core v 1.1で利用可能です。 .Net Core v1.0では、インスタンス名はWindows以外のOSではサポートされていません。
したがって、Linuxで実行されている.Net Core 1.0からインスタンス名を使用してSQL Serverに接続できるとは思いません。
あなたの選択は次のようです:
don't use instance name wait for .Net Core 1.1 (planned for "Fall 2016") use pre-release version of .Net Core 1.1