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:

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.

# 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:

@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.