WindowsでDocker toolboxを使用してVisual Studioと連携しようとして失敗した
まず言っておこう。
Docker for Windowsを使おうな!!!
事の発端
最初は僕もDocker for Windowsを素直に使ってみようと思っていた。
上記からDocker Community Edition for Windowsを入手し、インストール。
インストールを進めていたところ、下記のようなエラーに遭遇した。
Hyper-Vがないために発生するエラーのようだ。
どれどれ、Hyper-Vをインストールしようじゃないか。
よしよし、このリンクにインストール方法が載っているぞ。
ん?
は?
はああああ~~~~~~~!!!???
PC購入当時、1万円をケチったことを後悔していく。
Docker for WindowsではHyper-Vが必要で、Windows Home Editionでは動作させる方法がない。
そんなとこからHome Editionでも使用可能なDocker toolboxを使用してみる。
ここからはただただ心を折っていく出来事に立ち向かい、心が折れていく様を記載するだけである。
失敗
一度、最終的なゴールに立ち返ってみる。
最終的にはVisual Studio 2017 CommunityでASP.NET CoreのDockerコンテナの実行を可能にしようというものだ。
新規でASP.NET Coreプロジェクトを作成し、デバッグ無しで実行を正常に行うことができるようにする。
それに向かっていきながら発生したエラーを叩き潰していくという作業を行っていった。
Docker toolbox自体のインストールは事前に済ましておいた。
Powershellにパスを通す
PowershellにはDockerのパスが通っていないので、パスを通す。
docker-machine env default | Invoke-Expression
Dockerが実行されていない
Visual Studioからサンプルアプリケーションを作成し、デバッグ無しで実行しようとしてみると下記のエラーが発生。
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー Visual Studio コンテナー ツールでは、コンテナー化されたプロジェクトをビルド、デバッグ、実行する前に、Docker が実行されている必要があります。 詳細については、http://aka.ms/DockerToolsTroubleshooting をご覧ください docker-compose C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Sdks\Microsoft.Docker.Sdk\build\Microsoft.VisualStudio.Docker.Compose.targets 314
1>------ ビルド開始: プロジェクト: docker-compose, 構成: Debug Any CPU ------ 1>docker ps --filter "status=running" --filter "name=dockercompose16224944752208736737_dotnetcore02_" --format {{.ID}} -n 1 1>error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.33/containers/json?filters=%7B%22name%22%3A%7B%22dockercompose16224944752208736737_dotnetcore02_%22%3Atrue%7D%2C%22status%22%3A%7B%22running%22%3Atrue%7D%7D&limit=1: open //./pipe/docker_engine: The system cannot find the file specified. In the default daemon configuration on Windows, the docker client must be run elevated to connect. This error may also indicate that the docker daemon is not running. 1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Sdks\Microsoft.Docker.Sdk\build\Microsoft.VisualStudio.Docker.Compose.targets(314,5): error : Visual Studio コンテナー ツールでは、コンテナー化されたプロジェクトをビルド、デバッグ、実行する前に、Docker が実行されている必要があります。 1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Sdks\Microsoft.Docker.Sdk\build\Microsoft.VisualStudio.Docker.Compose.targets(314,5): error : 1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Sdks\Microsoft.Docker.Sdk\build\Microsoft.VisualStudio.Docker.Compose.targets(314,5): error : 詳細については、http://aka.ms/DockerToolsTroubleshooting をご覧ください 1>プロジェクト "docker-compose.dcproj" のビルドが終了しました -- 失敗。 ========== ビルド: 正常終了または最新の状態 0、失敗 1、スキップ 0 ==========
Docker MachineはDocker toolboxのQuick Installを実行した時点でdefaultというものが作成されているので存在はしているし、開始されているはず。
docker-machine create box
上記コマンドで新規に作成しても変わらず。
最初にPowerShellでパスを通した通り、Visual Studioでも参照できるようパスを通さなければいけないのかもと思い、仮でユーザー環境変数を設定してみた。
これをするとエラーは出なくなり出力が変わった。
dotnet SDKが見つからない?ボリューム共有が無効?
========== 起動中 ========== docker ps --filter "status=running" --filter "name=dockercompose16224944752208736737_dotnetcore02_" --format {{.ID}} -n 1 40cc4dbd74c0 docker exec -i 40cc4dbd74c0 dotnet --additionalProbingPath /root/.nuget/packages --additionalProbingPath /root/.nuget/fallbackpackages --additionalProbingPath /root/.nuget/fallbackpackages2 bin/Debug/netcoreapp2.0/DotNetCore02.dll docker inspect --format="{{json .NetworkSettings.Ports}}" 40cc4dbd74c0 {"80/tcp":[{"HostIp":"0.0.0.0","HostPort":"32768"}]} Did you mean to run dotnet SDK commands? Please install dotnet SDK from: http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409 ボリューム共有が有効になっていません。Docker CE for Windows の設定で、ボリューム共有を有効にしてください。 詳細については、http://aka.ms/DockertoolsTroubleshooting をご覧ください。
dotnet SDKが入っていないとのことなので入れてみる(VIsual Studioのインストールで入ってるぽいけどなんでだろ?)
入れようとしたらすでに入ってるよって出るので一度スルー。
ボリューム共有に取り掛かってみる。
VirtualBoxの共有フォルダーを設定するだけだとdocker-machineの再起動時に変更されるため駄目みたい。
下記にある通り、永続化と自動マウントを設定してあげればいいようだ。
設定後docker-machineを再起動
docker-machine restart default
そのままだとできなかったのでVisual Studioを再起動もしてみた。
残念ながらエラーは変わらずだった。
ここらへんで心が折れた。
このissueコメントを見ているとやっぱりtoolboxはダメみたいだ。
ここでWindows Pro Editionをインストールし、Hyper-Vを有効化、Docker for Windowsを入れて再度やってみたら今までのエラーが嘘かのようにすぐ実行できたのであった・・・。
失敗を糧に生きていくぞ!!!
おまけ
Hyper-V上にMobyLinuxVMが存在するのにdocker-machine lsで表示されなかった。
PS C:\Windows\system32> docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
下記を見ると、docker-machineはリモートに使用するとき以外は使わないっぽい。