VS2017RCでローカルのDockerコンテナ上でアプリをデバッグ実行しようとすると"MSB4018"エラーになる問題
覚え書き。
問題点
"Connect(); 2016"のキーノートのデモで、 Visual Studio 2017を使ってASP.NET CoreアプリをローカルのDockerコンテナで動かすというやつ(ビデオでは1時間10分頃から)があります。 それを見て、いっちょやってみようと思うわけです。
ということで、Visual Studio 2017 RCとDocker for Windowsをインストールし、 「ASP.NET Core Webアプリケーション」をテンプレートから作り、 Docker上でデバッグ実行しようとすると、 以下のエラー(MSB4018)が出ます。
"PrepareForLaunch" タスクが予期せずに失敗しました。
Microsoft.DotNet.Docker.CommandLineClientException: Creating network "webapplication12161511896_default" with the default driver
Building webapplication1
Creating webapplication12161511896_webapplication1_1
ERROR: for webapplication1 Cannot create container for service webapplication1: E: drive is not shared. Please share it in Docker for Windows Settings
Encountered errors while bringing up the project..
解決法
Docker for Windowsにドライブ共有の設定を追加します。
Docker for Windowsの"Settings"画面の"Shared Drives"タブを開いて、コンテナがローカルディスクを参照できるようにします。 要するに、 ここに書いてある設定を行う。
私の例の場合、プロジェクトを置いているドライブ(E:ドライブ)とシステムドライブ(C:ドライブ)の両方を共有する必要がありました。
また、セキュリティソフト等でファイヤーウォールが有効になっている場合、 Docker for Windowsのネットワーク上(デフォルトでは 10.0.75.0/24)でWindowsのファイル共有(TCPのポート445)が通るようにしておかなければなりません。 その説明は、ここ。 具体的な設定の仕方は使っているセキュリティソフトによって異なります。
まあ…
Visual Studio Tools for Dockerのドキュメントにはちゃんと説明されているし、 エラーメッセージもちゃんと読めば指示が書いているんですけどね。 キーノートのビデオ見て「いっちょやったろ」とそのままやってみたら、私のようにはまるかなと。