Blog

Verwendung der Docker-Tools für Visual Studio mit einem Hyper-V-basierten Docker-Host

Kees Verhaar

Aktualisiert Oktober 22, 2025
6 Minuten

In den letzten Wochen habe ich mit der Containerisierung einer ASP.NET Core-Anwendung mithilfe der Docker-Tools für Visual Studio herumgespielt. Damit können Sie Ihre Anwendung lokal in einem Docker-Container entwickeln und debuggen. Dazu benötigen Sie einen lokalen Docker-Host. Sie könnten zwar Ihre IT-Abteilung bitten, Ihnen einen solchen zur Verfügung zu stellen, aber ich fand es viel bequemer, eine virtuelle Maschine lokal auf meinem Laptop laufen zu lassen, so dass ich sie überall zur Verfügung habe, wo ich hingehe. Um einen lokalen Docker-Host zu erstellen, müssen Sie die Docker Toolbox verwenden. Damit wird mit VirtualBox eine lokale virtuelle Maschine erstellt, die als Docker-Host dient. Ich hatte jedoch bereits Hyper-V als Virtualisierungs-Hypervisor installiert. Hyper-V funktioniert hervorragend unter Windows 10, also wollte ich es beibehalten. Leider verträgt sich VirtualBox nicht mit Hyper-V (kurz gesagt, VirtualBox lässt sich nicht installieren, wenn Hyper-V aktiviert ist).

Lösung: Erstellen Sie einen lokalen Docker-Host auf Hyper-V. Leider ist der Prozess ein wenig kompliziert, deshalb möchte ich ihn hier beschreiben.

(Hinweis: Sie können natürlich auch Azure verwenden, um einen Docker-Host zu betreiben. Damit die Funktion "Bearbeiten & Aktualisieren" funktioniert, benötigen Sie jedoch ein gemeinsames Laufwerk zwischen Ihrem Docker-Host und Ihrem lokalen Entwicklungsrechner. Aufgrund der üblichen Firewall-/Netzwerkeinschränkungen ist dies mit einer Azure-VM oft nicht so einfach zu erreichen. In diesem Fall ist ein lokaler Docker-Host von Vorteil).

Voraussetzungen

Bevor Sie mit den Docker-Tools für Visual Studio arbeiten können, müssen Sie ein paar Dinge installieren:

Einrichten des Netzwerks

Als nächstes müssen Sie einen lokalen Docker-Host erstellen. Lassen Sie uns zunächst unsere Hyper-V-Infrastruktur einrichten.

Wir müssen einen virtuellen Switch erstellen, mit dem sich der Docker-Host verbinden wird, und sicherstellen, dass er Zugang zum Internet hat. Öffnen Sie im Hyper-V Manager den Virtual Switch Manager und erstellen Sie einen neuen virtuellen Switch. Geben Sie ihm einen Namen und stellen Sie sicher, dass es sich um ein internes Netzwerk handelt:

Bild

Wir verwenden hier ein internes Netzwerk, um sicherzustellen, dass die IP-Adresse auch bei einem Neustart oder wenn Sie Ihren Entwicklungsrechner mit einem anderen Netzwerk verbinden, gleich bleibt. Der Nachteil der Verwendung eines internen Netzwerks ist, dass es nicht mit Ihrem externen Netzwerk verbunden ist. Daher funktionieren Dinge wie das Herunterladen von Docker-Images aus öffentlichen Repositories oder die Wiederherstellung von NuGet-Paketen aus öffentlichen Feeds nicht. Um dies zu umgehen, können wir die Funktion Internetverbindungsfreigabe verwenden, um unsere Internetverbindung mit dem neu erstellten internen Netzwerk zu teilen.

Öffnen Sie das Fenster "Netzwerkverbindungen anzeigen" (in Windows 10 suchen Sie einfach nach "Netzwerk" und es wird angezeigt):

Bild

Öffnen Sie dort die Eigenschaften des Adapters, der Ihre Internetverbindung darstellt (in meinem Fall ist es ein überbrückter Adapter), und aktivieren Sie auf der Registerkarte Freigabe die Freigabe der Internetverbindung. Wählen Sie Ihr internes Netzwerk als Heimnetzwerkverbindung:

Bild

Erstellen Sie die virtuelle Maschine des Docker-Hosts

Als nächstes müssen Sie die virtuelle Maschine erstellen, die Ihr Docker-Host sein wird. Die Docker Toolbox bietet ein nettes kleines Kommandozeilen-Tool zur Verwaltung von Docker-Hosts: docker-machine. Damit können Sie einen Docker-Host erstellen, starten, stoppen oder löschen.

Öffnen Sie eine PowerShell-Eingabeaufforderung und geben Sie den Befehl zum Erstellen eines Docker-Hosts ein:

$ docker-machine create --driver hyperv --hyperv-virtual-switch "<Ihr virtueller Schalter>"  <Ihr vm-Name>
Bild

Es wird ein wenig dauern, aber wenn der Vorgang abgeschlossen ist, sollten Sie Ihre neue VM im Hyper-V Manager sehen:

Bild

Als Letztes müssen Sie Ihre Umgebung so einrichten, dass die neu erstellte VM als aktiver Computer verwendet wird. Dazu geben Sie in einer PowerShell-Eingabeaufforderung ein:

$ docker-machine env  <Ihr vm-Name>  | Invoke-Ausdruck

Danach können Sie "docker-machine ps" eingeben, um zu überprüfen, ob Ihre neue VM tatsächlich aktiv ist:

Bild

Gemeinsame Nutzung eines Laufwerks, damit "Bearbeiten & Aktualisieren" funktioniert

Damit die Funktion "Bearbeiten & Aktualisieren" funktioniert, erwarten die Docker-Tools für Visual Studio, dass der Ordner, in dem Sie Ihren Code auf Ihrem Entwicklungsrechner aufbewahren, für die Docker-Host-VM unter demselben Pfad freigegeben ist. Die Docker-Toolbox kümmert sich automatisch darum, wenn Sie VirtualBox verwenden. Wenn Sie jedoch Hyper-V verwenden, müssen Sie sich selbst darum kümmern.

In meinem Fall bewahre ich meinen gesamten Code auf meinem Windows-Rechner unter "D:Git" auf. Wir müssen dies für die Docker-Host-VM freigeben, aber da es sich um eine Linux-VM handelt, sieht der Pfad ein wenig anders aus: "/d/Git". Hierfür verwenden wir die normale Windows-Netzwerkfreigabe.

Geben Sie zunächst den Ordner auf Ihrem Windows-Rechner frei. Öffnen Sie die Eigenschaften des Ordners und gehen Sie auf die Registerkarte "Freigabe". Geben Sie von dort aus den Ordner frei:

Bild

Nun müssen wir vom Docker-Host aus eine Verbindung zu diesem freigegebenen Laufwerk herstellen. Verbinden Sie sich dazu zunächst über SSH mit Ihrem Docker-Host. Dies können Sie ganz einfach mit:

$ docker-machine ssh  <Ihr vm-Name>
Bild

Erstellen Sie dann den Linux-Äquivalenzpfad Ihres freigegebenen Ordners (in meinem Fall "/d/Git") und verbinden Sie sich dann mit "mount" mit diesem:

$ sudo mkdir -p  <Ihr Weg>
$ sudo mount -t cifs //192.168.137.1/Git /d/Git -o user=keesv,pass=<Ihr Passwort>,domain=<Ihre Domäne>

Natürlich ersetzen Sie die korrekte IP (Ihres Windows-Entwicklungsrechners), die Pfade, den Benutzernamen und das Passwort. Wenn Sie kein Domänenkonto verwenden, können Sie den Teil ",domain=<your domain>" weglassen. Prüfen Sie nun, ob der Inhalt des gemeinsamen Ordners verfügbar ist, indem Sie "ls /d/Git" verwenden:

Bild

Sie werden feststellen, dass das freigegebene Laufwerk nicht mehr verbunden ist, wenn Sie Ihre Docker Host-VM neu starten. Um zu vermeiden, dass Sie die Verbindung jedes Mal neu herstellen müssen, können wir die Verbindung dauerhaft herstellen. Dazu erstellen Sie (während Sie noch über SSH verbunden sind) ein Skript, das bei jedem Start aufgerufen wird:

$ sudo touch /mnt/sda1/var/lib/boot2docker/bootlocal.sh

Dann öffnen Sie die Datei zur Bearbeitung (ich verwende hier vi, da es standardmäßig verfügbar ist):

$ sudo vi /mnt/sda1/var/lib/boot2docker/bootlocal.sh

Um die Bearbeitung in vi zu beginnen, drücken Sie "i". Geben Sie dann Folgendes ein (und ersetzen Sie es ggf. für Ihre Konfiguration):

mkdir -p /d/Git
mount -t cifs //192.168.137.1/Git /d/Git -o user=keesv,pass=<Ihr Passwort>,domain=<Ihre Domäne>
Bild

Beenden Sie vi durch Eingabe von Strg + c, dann ":wq" und drücken Sie <enter>.

Starten Sie nun Ihre VM neu, melden Sie sich per SSH wieder an und überprüfen Sie, ob der gemeinsame Ordner verfügbar ist:

Bild

Ausführen einer ASP.NET Core-Anwendung

Um zu sehen, ob alle Teile zusammenarbeiten, erstellen wir eine sehr einfache ASP.NET Core-Anwendung und führen sie in einem Docker-Container auf unserem frisch erstellten Docker-Host aus.

Erstellen Sie zunächst die App. Stellen Sie sicher, dass sie in dem Ordner erstellt wird, den Sie gerade für Ihren Docker-Host freigegeben haben!

clip_image002 clip_image004

Verwenden Sie dann die Docker-Tools für Visual Studio, um dem Projekt Docker-Unterstützung hinzuzufügen:

clip_image006

Wir müssen den Docker-Host angeben, auf dem wir den Container ausführen möchten. Dies muss ein Host sein, der durch docker-machine bekannt ist. Öffnen Sie die Datei "Docker.props" und ändern Sie den Namen des Docker-Rechners:

clip_image008

Nachdem Sie diese Änderung vorgenommen haben, müssen Sie Visual Studio neu starten, also tun Sie das jetzt. Wenn Sie Ihr Projekt wieder geöffnet haben, setzen Sie das Debugging-Ziel auf "Docker" und drücken Sie F5:

Bild

Dadurch wird das Docker-Image in Ihrer Docker-Host-VM erstellt und anschließend ein darauf basierender Container ausgeführt. Nach einer Weile sollte die Webseite angezeigt werden:

Bild

Beachten Sie, dass der Visual Studio-Debugger mit Ihrer im Container laufenden Anwendung verbunden ist. Sie können also Haltepunkte setzen, Watches verwenden und all die anderen Vorzüge nutzen, die Visual Studio für das Debugging so attraktiv machen!

Viel Spaß beim Dockerisieren!

Verfasst von

Kees Verhaar

Welcome to my blog! I am an ALM consultant for Xpirit Netherlands B.V. Sounds fancy, doesn’t it? Basically it means I help people to do their work as a software engineer better, faster and easier. In the past couple of years of working in the field, I have encountered many things of which I thought: “I should share this!”. This blog is my way of doing that. You’ll find real life stories, tips & tricks, examples and probably even some code here. Hope you enjoy! If you have any suggestions, please feel free to drop me a line.

Contact

Let’s discuss how we can support your journey.