Docker Desktop ist eine fantastische Container-Virutalisierungslösung, extrem schnell, portabel und kostenlos. Doch leider lässt sich Docker Desktop unter Windows 10 nicht als Service installieren. D.h. der Benutzer muss sich zuerst am System anmelden, damit Docker startet.
Das ist ein dann ein Problem, wenn der Server aus irgend einem Grund neu startet. Die Docker-Services stehen dann erst wieder nach Benutzer-Anmeldung zur Verfügung. Dieser Artikel zeigt eine elegante Lösung, ganz ohne Windows Dienste.
Windows: Docker-Desktop ohne Login starten
Der Trick ist nun der, Docker Desktop über die Windows Aufgabenplanung in den Systemstart einzuhängen. Damit das reibungslos funktioniert, muss das Starten der Docker Container so lange warten, bis die Docker Engine gestartet ist. Hierzu benutzen wir das Docker Python SDK.
Zuerst installieren wir hierzu Python, hier Version 2.7.18 von www.python.org
Mit dem folgenden Befehlen installieren wir PIP, den Python Package Manager und das Docker SDK:
1 2 |
easy_install pip pip install docker |
Als Nächstes erstellen wir folgendes Python Skript und speichern es unter dem Namen bootstrap-docker.py im gleichen Verzeichnis wie docker-compose.yml.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# boostrap-docker.py 1.0.0 # # Starts Docker Desktop as a background task # and boostraps all containers after the Docker Engine # is up. # # (c)2020 Harald Schneider # import docker, subprocess, time # Starte Docker Desktop subprocess.call(['powershell.exe', 'start "C:\Program Files\Docker\Docker\Docker Desktop.exe"']) # Warte bis Docker Desktop komplett gestartet ist # started = False while not started: try: client = docker.from_env() info = client.info() started = True except: time.sleep(1) # Starte alle Container mit Docker Compose # subprocess.call(['powershell.exe', 'docker-compose up -d']) |
Danach erstellen wir noch eine Batch-Datei, die das Python-Skript startet:
1 2 3 4 5 6 7 8 9 |
@echo off REM CD in den Ordner mit unserem Python-Skript REM c: cd \work\software\playground\docker\dstack REM Python Skript starten C:\Python27\python.exe bootstrap-docker.py |
Nun fehlt nur noch der Eintrag im Windows Aufgabenplaner, mit den folgenden Einstellungen:
- Ausführung unabhängig von der Systemanmeldung
- Ausführung mit höchsten Privilegien
- Ausführung beim Systemstart
- Als Aktion wird der Pfad zur o.g. Batch-Datei eingetragen.
Nach Neustart läuft Docker-Desktop samt aller gestarteten Container als Task im Hintergrund, unabhängig von der Benutzeranmeldung.
Es gibt nur einen einzigen Nachteil:
Die Verwaltungsoberfläche von Docker Desktop lässt sich nicht mehr starten, da sie schon unsichtbar im Hintergrund läuft. D.h. das Container-Management muss z.B. über die entsprechenden Docker Shell-Befehle geschehen.
Mein Tipp an dieser Stelle:
VisualStudio Code samt Docker Plugin sind ein mächtiges Tool um alle Aufgaben effizient zu erledigen. Es lässt keine Wünsche offen.
Hallo Allerseits,
nach ich, für die Umsetzung eines Projektes, vor ca. einem Jahr vor die
Aufgabe gestellt wurde, LINUX-Container unter Windows22-Server “betreiben”
zu müssen und anderweitig (bislang) keine Möglichkeit gefunden habe,
Docker Desktop ohne Anmeldung zu betreiben, bin ich über diese Anleitung “gestolpert”.
Tatsächlich hat das auch zu einem guten Ergebnis (als WorkAround) geführt…
Nun bin ich an dem Punkt, das Projekt (in Form o. g. Container) unter Real-Bedingungen
zu testen und habe dafür einen (virtuellen) W2k22-Server aufgesetzt und
alles notwendige soweit zu konfigurieren, dass das Projekt in einem LAN zur
Verfügung steht… LEIDER greift nun die von Ihnen dokumentierte Methode zum
Start von “Docker Desktop” beim System-Start nicht mehr :(
Eingesetzt wird momentan die “Docker Desktop”-Version 4.19.0….
Kann es sein, dass bestimmte Funktionalitäten sich seit meinem Laufzeit-Test
im August letzten Jahres zu JETZT (Ihres Wissens nach) geändert haben und
haben Sie ggf. eine Idee, was verändert werden muss/kann, um diese Funktionalität
lauffähig zu bekommen?
Über Ihre Hilfe würde ich mich sehr freuen und verbleibe
mit freundlichen Grüßen
Steve Herrschildt
In den letzten 3 Jahren hat sich sowohl bei Docker, als auch bei Windows einiges geändert. Es ist nicht auszuschliessen, daß der Workaround nicht mehr klappt.
Mit dieser Lösung sollte es weiterhin funktionieren. Am besten mal die Demo testen:
https://www.coretechnologies.com/products/AlwaysUp/Apps/StartDockerContainerWindowsService.html