Ein MSSQL Server 2022 in Docker mit eingebundenem Windows-Laufwerk ist praktisch, wenn du lokal eine Datenbank für Entwicklung oder Tests brauchst und Sicherungsdateien direkt auf dem Windows-Rechner ablegen möchtest. In dieser Anleitung startest du einen Linux-Container mit SQL Server 2022, speicherst die eigentlichen Datenbankdateien in einem Docker-Volume und bindest einen Windows-Ordner für Backups ein. Zusätzlich findest du eine Compose-v2-Variante, einen Healthcheck und Hinweise zu Secrets sowie SQL Server 2025.

Was läuft hier eigentlich unter Windows?

Das offizielle Image mcr.microsoft.com/mssql/server:2022-latest enthält SQL Server für Linux. Auf einem Windows-Rechner läuft es mit Docker Desktop im Modus Linux containers, üblicherweise über WSL 2. Ein Windows-Container wird damit nicht gestartet. Prüfe außerdem, ob dein Rechner beziehungsweise die Docker-Umgebung eine unterstützte x86-64-Architektur bereitstellt; Microsoft unterstützt die SQL-Server-Container-Images nicht auf emulierten ARM-Umgebungen.

Für den Einstieg brauchst du Docker Desktop mit aktiviertem Linux-Container-Modus und docker compose v2. Für SQL Server nennt Microsoft mindestens 2 GB RAM und 2 GB freien Speicher; für Docker Desktop, Betriebssystem und reale Arbeit ist zusätzliche Reserve nötig. Die kostenlose Developer-Edition dient Entwicklung und Tests. Für produktive Nutzung sind die passende Edition und Lizenz zu prüfen. Wenn Docker noch nicht eingerichtet ist, beginne mit Docker installieren und konfigurieren.

Warum Daten-Volume und Windows-Ordner getrennt bleiben

Der ursprüngliche Beitrag bindet einen Windows-Pfad direkt nach /var/opt/mssql/data ein. Das kann an Dateifreigabe und Rechten scheitern und macht die aktiven Datenbankdateien von einem Windows-Bind-Mount abhängig. Für einen MSSQL Server 2022 in Docker ist ein benanntes Volume unter /var/opt/mssql in diesem lokalen Aufbau der einfachere Speicherort für Daten und Systemdateien. Der Windows-Ordner C:\SQL-Backups wird zusätzlich unter /backup eingebunden, damit .bak-Dateien auf dem Host sichtbar sind.

Ein Volume ersetzt kein Backup: Es übersteht das Entfernen des Containers, kann aber zusammen mit der Docker-Umgebung verloren gehen. Sichere die Datenbanken zusätzlich nach einem festen Plan und teste die Wiederherstellung. Der Artikel MSSQL Backup und Restore erklärt die Sicherungskette.

MSSQL Server 2022 in Docker mit Windows-Laufwerk starten

Öffne PowerShell. Lege zuerst den Backup-Ordner an und prüfe, dass Docker auf Linux-Container gestellt ist. Die folgenden PowerShell-Befehle sind für eine lokale Testumgebung gedacht:

New-Item -ItemType Directory -Force -Path 'C:\SQL-Backups'
docker version
docker compose version

Setze ein starkes sa-Passwort für den Start. Die Eingabe über Read-Host -AsSecureString wird im Terminal nicht angezeigt; für die Übergabe an Docker muss sie anschließend kurz als Umgebungsvariable vorliegen. Verwende keine echten Passwörter als Klartext in einem veröffentlichten Skript oder in der Shell-Historie.

$securePassword = Read-Host 'SA-Passwort' -AsSecureString
$env:MSSQL_SA_PASSWORD = [System.Net.NetworkCredential]::new('', $securePassword).Password

Starte den Container mit einem benannten Volume und dem Windows-Backup-Ordner. Der Host-Port 14333 ist nur an 127.0.0.1 gebunden, also zunächst nicht im Netzwerk erreichbar:

docker run -d --name mssql2022 --restart unless-stopped `
  -e ACCEPT_EULA=Y `
  -e MSSQL_PID=Developer `
  -e MSSQL_SA_PASSWORD `
  -p 127.0.0.1:14333:1433 `
  --mount 'type=volume,source=mssql2022_data,target=/var/opt/mssql' `
  --mount 'type=bind,source=C:\SQL-Backups,target=/backup' `
  mcr.microsoft.com/mssql/server:2022-latest

Remove-Item Env:MSSQL_SA_PASSWORD

ACCEPT_EULA=Y bestätigt die Lizenzbedingungen. MSSQL_PID=Developer wählt die Entwickleredition. MSSQL_SA_PASSWORD ersetzt die veraltete Variable SA_PASSWORD. Der Docker-Daemon übernimmt das Passwort dennoch in die Container-Konfiguration; Benutzer mit Docker-Zugriff können es auslesen. Die Umgebungsvariable nach docker run aus PowerShell zu entfernen reduziert nur ihre Verweildauer in dieser Shell.

Falls du bereits einen Container namens mssql2022 hast, stoppe und entferne ihn nicht blind. Prüfe zunächst seinen Speicherort und die vorhandenen Daten. Ein bestehendes Volume wird durch einen neuen Container mit demselben Volume-Namen wiederverwendet.

Das sa-Passwort wird beim ersten Initialisieren der SQL-Server-Daten festgelegt. Wenn du später dasselbe Volume mit einem neuen Container verwendest, ändert eine andere Umgebungsvariable das bestehende SQL-Login-Passwort nicht automatisch.

Start und Verbindung prüfen

Ein laufender Container bedeutet noch nicht, dass SQL Server schon Anmeldungen akzeptiert. Prüfe deshalb Status und Log:

docker ps -a --filter 'name=mssql2022'
docker logs --tail 80 mssql2022
docker exec mssql2022 ls -ld /var/opt/mssql /backup

Warte auf die Meldung, dass SQL Server für Client-Verbindungen bereit ist. Verbinde dich anschließend mit SQL Server Management Studio über localhost,14333, SQL-Server-Authentifizierung, Benutzer sa und dein Passwort. Bei einer lokalen Testinstallation mit einem selbstsignierten Zertifikat kann der Client eine Zertifikatswarnung anzeigen; für produktive Verbindungen solltest du ein vertrauenswürdiges TLS-Zertifikat konfigurieren und die Zertifikatsprüfung nicht pauschal deaktivieren.

Eine einfache Abfrage zur Kontrolle lautet:

SELECT @@VERSION AS SQLServerVersion;
SELECT name FROM sys.databases ORDER BY name;

Ein Backup auf das Windows-Laufwerk schreiben

Der SQL-Server-Prozess sieht den eingebundenen Ordner als /backup. Die T-SQL-Anweisung verwendet daher den Containerpfad, nicht C:\SQL-Backups. Ersetze MeineDatenbank durch eine vorhandene Testdatenbank und verwende pro Lauf einen neuen Dateinamen:

BACKUP DATABASE [MeineDatenbank]
TO DISK = N'/backup/MeineDatenbank_full_20260925_1200.bak'
WITH CHECKSUM, COMPRESSION, STATS = 10;

Die Datei sollte danach unter C:\SQL-Backups erscheinen. Wenn der SQL-Server-Dienst nicht schreiben kann, prüfe die Windows-Freigabe für Docker Desktop, den Ordner und die Berechtigungen des nicht privilegierten Container-Benutzers. Binde für produktive Datenbanken keine beliebigen Netzlaufwerke ein, ohne Dateisystem, Rechte, Leistung und Wiederherstellung zu testen.

Dieselbe Einrichtung mit Docker Compose v2

Für einen wiederholbar konfigurierten MSSQL Server 2022 in Docker lege einen Ordner für compose.yaml an. Das folgende Beispiel nutzt dasselbe Docker-Volume und denselben Windows-Backup-Ordner. Die Variable MSSQL_SA_PASSWORD muss vor dem Start in der PowerShell-Sitzung gesetzt sein, wie oben gezeigt; bei einem bestehenden Volume ist das bereits eingerichtete Passwort nötig. Wenn du noch den docker run-Container nutzt, beende ihn vor dem Start von Compose, weil beide Beispiele denselben Host-Port und dasselbe Volume verwenden.

services:
  sqlserver:
    image: mcr.microsoft.com/mssql/server:2022-latest
    container_name: mssql2022-compose
    restart: unless-stopped
    environment:
      ACCEPT_EULA: "Y"
      MSSQL_PID: Developer
      MSSQL_SA_PASSWORD: ${MSSQL_SA_PASSWORD:?SA-Passwort fehlt}
    ports:
      - "127.0.0.1:14333:1433"
    volumes:
      - mssql2022_data:/var/opt/mssql
      - "C:/SQL-Backups:/backup"
    healthcheck:
      test: ["CMD-SHELL", "SQLCMDPASSWORD=\"$$MSSQL_SA_PASSWORD\" /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -Q 'SELECT 1' -b -C -o /dev/null"]
      interval: 15s
      timeout: 10s
      retries: 10
      start_period: 60s

volumes:
  mssql2022_data:
    name: mssql2022_data

Starte und prüfe den Dienst mit docker compose up -d, docker compose ps und docker compose logs --tail=80 sqlserver. Die beiden Dollarzeichen im Healthcheck verhindern, dass Compose das Passwort bereits beim Einlesen der YAML-Datei ersetzt. Der Check führt eine echte SQL-Abfrage aus; -b sorgt bei SQL-Fehlern für einen fehlgeschlagenen Status. -C vertraut dem lokalen Serverzertifikat innerhalb des Containers. Ersetze diesen einfachen sa-Check in einer produktiven Umgebung durch einen eigenen, minimal berechtigten Monitoring-Login und eine geprüfte TLS-Konfiguration.

Wichtig: docker compose config gibt aufgelöste Umgebungswerte aus und kann damit das Passwort anzeigen. Nutze diesen Befehl nur in einer geschützten Umgebung und veröffentliche seine Ausgabe nicht. docker compose down entfernt Container und Netzwerk; mit docker compose down -v würdest du zusätzlich das benannte Daten-Volume löschen.

Wie passen Docker-Secrets dazu?

Docker Compose kann Secrets als Dateien unter /run/secrets/... in Linux-Container einhängen. Das ist für Anwendungen geeignet, die einen Passwortpfad wie ..._PASSWORD_FILE ausdrücklich unterstützen. Für das offizielle SQL-Server-Image ist eine Variable MSSQL_SA_PASSWORD_FILE in der Microsoft-Dokumentation nicht beschrieben. Eine Compose-Secret-Datei allein setzt deshalb nicht automatisch das sa-Passwort.

So sähe ausschließlich das Einbinden einer solchen Datei aus; dieser Ausschnitt ist noch keine lauffähige Passwortkonfiguration für das Microsoft-Image:

services:
  sqlserver:
    secrets:
      - sa_password

secrets:
  sa_password:
    file: ./secrets/sa_password.txt

Für eine produktive Secret-Lösung brauchst du einen getesteten Startmechanismus oder ein Orchestrierungssystem, das den Secret-Wert kontrolliert an die vom Image unterstützte Variable MSSQL_SA_PASSWORD übergibt. Dabei bleibt ein Passwort in der Prozessumgebung ein möglicher Zugriffspunkt für berechtigte Docker-Administratoren. Ein .env-File ist lediglich eine getrennte Konfigurationsdatei und kein Secret-Speicher. Bewahre es außerhalb der Versionsverwaltung auf und schränke seine Dateirechte ein.

Rechte, Netzwerk und Datensicherheit

  • Dateirechte: SQL-Server-Container ab Version 2019 laufen standardmäßig ohne Root-Rechte. Bei Bind-Mounts muss der Container-Benutzer auf das Ziel schreiben dürfen. Ein benanntes Volume nimmt dir auf Windows viele Zuordnungsprobleme ab.
  • Netzwerk: Die Bindung an 127.0.0.1 begrenzt den Host-Port auf den lokalen Rechner. Für Zugriff aus dem Netz musst du Portfreigabe und Firewall bewusst konfigurieren und SQL Server absichern.
  • Passwort: Verwende ein langes, einzigartiges Passwort. Der sa-Zugang ist für die Einrichtung gedacht; für Anwendungen sind eigene Logins mit möglichst kleinen Rechten besser. Wenn du sa später deaktivierst, muss auch der Healthcheck angepasst werden.
  • Speicher: Halte Daten-Volume und Backups getrennt. Kopiere Sicherungen zusätzlich auf einen anderen Speicherort und teste einen Restore. Ein Windows-Ordner, der zusammen mit dem Rechner ausfällt, ist keine ausreichende Ausfallvorsorge.
  • Updates: 2022-latest kann auf einen neuen Cumulative-Update-Stand zeigen. Prüfe Version und Änderungen vor einem Image-Wechsel. Für reproduzierbare Umgebungen nutze einen konkreten geprüften Tag oder Digest.

SQL Server 2025 statt 2022 verwenden?

Microsoft bietet inzwischen auch das Linux-Container-Image mcr.microsoft.com/mssql/server:2025-latest an. Für einen neuen Testaufbau kannst du den Image-Tag in compose.yaml ändern und ein eigenes, leeres Volume sowie einen anderen Host-Port verwenden. Starte SQL Server 2025 nicht unvorbereitet mit dem bestehenden 2022-Daten-Volume: Ein Versionswechsel kann die Datenbankdateien aktualisieren, und ein Zurück auf die ältere SQL-Server-Version ist dann nicht einfach möglich. Sichere die Daten, lies die Upgrade-Hinweise und teste den Restore vor einer Migration.

Die Developer-Edition bleibt auch bei SQL Server 2025 für Entwicklung und Tests vorgesehen. Prüfe für produktive Nutzung die Edition, Lizenz und die Freigabe deiner Architektur. Die Microsoft-Dokumentation zeigt die Tags 2022-latest und 2025-latest im selben Docker-Schnellstart.

Häufige Fragen zum MSSQL Server 2022 in Docker

Wo liegen meine Daten nach dem Löschen des Containers?

Wenn du das benannte Volume mssql2022_data wie im Beispiel verwendest, bleiben die Daten beim Entfernen des Containers im Volume. Löschst du auch das Volume, sind diese Dateien weg. Backups werden separat im eingebundenen Windows-Ordner gespeichert.

Warum startet der Container nicht?

Prüfe mit docker ps -a und docker logs mssql2022 den Status. Häufige Ursachen sind ein zu schwaches sa-Passwort, zu wenig RAM, ein belegter Host-Port oder fehlende Schreibrechte auf eingebundenen Ordnern.

Kann ich den Windows-Ordner direkt für Datenbankdateien verwenden?

Technisch ist ein Bind-Mount möglich. Für aktive Datenbankdateien solltest du Rechte, Dateisystemverhalten, Leistung und einen Wiederherstellungstest sorgfältig prüfen. Der hier gezeigte Aufbau nutzt deshalb ein Docker-Volume für SQL Server und den Windows-Ordner für Backup-Dateien.

Fazit

Ein MSSQL Server 2022 in Docker mit Windows-Laufwerk lässt sich mit wenigen Befehlen starten. Für einen verlässlichen Aufbau zählen aber die Details: Linux-Container, ein dauerhaftes Daten-Volume, ein getrenntes Backup-Verzeichnis, ein begrenzter Netzwerkport und eine echte Verbindungsprüfung. Compose v2 erleichtert die Wiederholung; bei Secrets und beim Wechsel zu SQL Server 2025 musst du die Grenzen des Images und die Folgen für vorhandene Daten berücksichtigen.

Quellen