Tel Map

Blog

Docker für Windows und Host Volumes

Das Container-Management System Docker ist ganz praktisch, um Dienste und Applikationen in einer kontrollierten und isolierten Umgebung laufen zu lassen. In vielen Situationen ist es außerdem hilfreich, Verzeichnisse in einem Docker Container auf ein lokales Verzeichnis mappen zu können.
Speziell in Entwicklungs-Umgebungen, wo diese Konfiguration es erlaubt Dateien (z.B. für eine Web-Applikation) auf dem Host-Volume direkt in der IDE zu modifizieren, so dass der laufende Docker Dienst diese geänderten Dateien direkt ohne ein Deployment übernimmt.

Auch wenn Docker Container oft Linux Binaries laufen lassen, gibt es mit der „Docker Desktop“ Suite die Möglichkeit native Linux Container auf einem Windows-System laufen zu lassen.

Wie funktioniert das?

Um Linux Container laufen zu lassen verwendet Docker Desktop eine Virtuelle Machine mit einem richtigen Linux System. Um genau zu sein, muss für die Verwendung von Docker Desktop das Windows10 Virtualisierungsfeature „Hype-V“ aktiv sein.
Jeder laufende Linux Container wird dann über diese Virtuelle Maschine ausgeführt. Man diese VM auch sehen, wenn man die Hyper-V Management Applikation öffnet, und findet dort die von Dokcer Desktop angelegte „MobyLinuxVM“.

Host Volumes werden dann über SMB/CIFS Shares in der Virtuellen Maschine eingebunden (wie ein Netzlaufwerk). Damit ein solches Host Volume verwendet werden kann, muss dieses zunächst in den Docker Desktop Einstellungen „aktiviert“ werden:

Diese wird die ausgewählten Laufwerke als Windows Netzwerkfreigaben auf dem Rechner freigeben, mit den Zugriffsrechten des aktuellen Benutzers.

Falls du diesbezüglich irgendwelche Sicherheitsbedenken hast, solltest du das Host Volumes Feature nicht verwenden!

Beispiel

Um ein einfaches Beispiel zu zeigen, werden wir einen Apache Httpd Web-Server starten und damit den Inhalt eines lokalen Verzeichnisses ausliefern:

Jetzt kannst du deinen Web-Browser auf der URL http://localhost öffnen, und wirst den Text „Hello World“ sehen. Jedes Mal, wenn du die erstellte Datei webserver-example/index.html änderst, wird die Änderung direkt nach einem Refreshen des Browsers übernommen.

Problembehandlung

Da das Docker Desktop System von einigen verschiedenen Teilen des Systems (SMB Netzwerkfreigaben, Hyper-V Virtuelle Maschine, Virtuelle Netzwerkgeräte) abhängig ist, ist es leider recht fehleranfällig.

Problem 1: Das Docker System kann sicht nicht mehr mit dem Internet verbinden, und auch keine Ports mehr freigeben

Das scheint zu passieren, wenn das Windows-System neu gestartet wird, die Option „Schnellstart“ aktiviert ist, und die Virtuelle Maschine noch läuft. Anscheinend speichert Windows dann den Zustand der VM und stellt diesen nach dem Start (unvollständig) wieder her.

Um das zu beheben gibt es mehrere Möglichkeiten:

  • den Docker Desktop Dienst nach jedem System-Neustart auch noch einmal durchstarten (Rechtsklick auf das Icon, dann „Restart …“ auswählen)
  • die Option „Schnellstart“ in der Systemsteuerung unter Energieoptionen deaktivieren
  • den Docker Dienst vor dem Herunterfahren/Neustarten immer ausschalten

Problem 2: Das Host Verzeichnis synchronisiert nicht mit dem Docker Volume

Angenommen du hast einen Docker Container erstellt mit einem Volume das zu einem Verzeichnis auf dem Host gemappt ist. Aber im Docker Container können die Dateien auf dem Host nicht länger gefunden werden, und auch erstellte/geänderte Dateien im Container werden nicht mehr auf der Host Maschine angezeigt.

Dies kann passieren, wenn die CIFS-Verbindung zwischen dem Host und der MobyLinuxVM gestört ist.

  • du hast den Username oder das Passwort geändert
  • du hast den Namen des Computers im Netzwerk geändert
  • du hast etwas an den Netzwerk-Freigabe Einstellungen von WIndows geändert

Wenn das Problem auch nach einem Neustart der Maschine noch besteht, kannst du versuchen die gespeicherten Zugangsdaten für die Netzwerkfreigabe zu aktualisieren.

Im gleichen Dialog der Docker Desktopn Einstellungen, wo auch die „Shared Drives“ konfiguriert werden können, gibt es einen klickbaren Link „Reset credentials“. Dies wird dir erlauben, die Shared Drives erneut zu aktivieren und fragt dich erneut nach deinen Netzwerk-Zugangsdaten.

Wenn dies das Problem nicht löst, kannst du du noch versuchen, Docker Desktop auf den Werkszustand zurücksetzen. Dies wird auch alle deine Images und Container löschen, also solltest du vorher ein Backup von allem machen, was du noch brauchst.
Da dieser Vorgang auch die MobyLinuxVM entfernt und neu anlegt, können dadurch vorige Fehlkonfigurationen behoben werden. Bei mir hat das schon einmal geholfen, die Shared Drives wieder zum laufen zu bringen, nachdem die anderen Optionen fehlgeschlagen waren.

26.04.2019 |
Schlagwörter: , , ,

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert