Whisper Docker-Setup: Vollständige Anleitung zum Betrieb von OpenAI Whisper in Docker

Whisper Docker-Setup: Vollständige Anleitung zum Betrieb von OpenAI Whisper in Docker

Eric King

Eric King

Author


Einführung

OpenAI Whisper in Docker-Containern auszuführen liefert eine konsistente, isolierte Umgebung, die die Bereitstellung vereinfacht und „bei mir läuft es“-Probleme vermeidet. Mit Docker können Sie:
  • Überall bereitstellen – denselben Container auf jeder Docker-kompatiblen Plattform ausführen
  • Abhängigkeiten isolieren – Konflikte mit Systempaketen vermeiden
  • Einfach skalieren – mehrere Container für parallele Verarbeitung starten
  • Versionen steuern – bestimmte Whisper-Versionen und Konfigurationen festnageln
  • Bereitstellung vereinfachen – ein Befehl für alles
Dieser Leitfaden deckt alles ab, was Sie für Whisper in Docker brauchen – von einfachen Containern bis zu produktionsreifen Konfigurationen mit GPU-Unterstützung.

Warum Docker für Whisper?

Vorteile der Containerisierung

1. Konsistenz
  • dieselbe Umgebung in Entwicklung, Staging und Produktion
  • keine Abhängigkeitskonflikte
  • reproduzierbare Builds
2. Portabilität
  • auf jeder Plattform mit Docker lauffähig
  • einfache Migration zwischen Servern
  • cloudunabhängige Bereitstellung
3. Isolation
  • keine Beeinträchtigung des Host-Systems
  • saubere Deinstallation (Container entfernen)
  • Sicherheit durch Isolation
4. Skalierbarkeit
  • horizontale Skalierung leicht möglich
  • Lastverteilung über Container
  • Ressourcenlimits pro Container
5. DevOps-Integration
  • passt in CI/CD-Pipelines
  • Kubernetes-tauglich
  • freundlich für Cloud-Deployments

Voraussetzungen

Bevor Sie starten, sollten Sie Folgendes haben:
  • Docker installiert (Version 20.10+)
  • Docker Compose (optional, für mehrere Container)
  • NVIDIA Docker (optional, für GPU-Unterstützung)
  • Grundkenntnisse der Docker-Befehle

Docker installieren

macOS:
# Install Docker Desktop from docker.com
# Or using Homebrew
brew install --cask docker
Ubuntu/Debian:
sudo apt update
sudo apt install docker.io docker-compose
sudo systemctl start docker
sudo systemctl enable docker
Windows: Docker Desktop von docker.com herunterladen

Installation prüfen

docker --version
docker-compose --version

Einfaches Dockerfile für Whisper

Wir beginnen mit einem einfachen Dockerfile für Whisper:
FROM python:3.10-slim

# Set working directory
WORKDIR /app

# Install system dependencies
RUN apt-get update && apt-get install -y \
    ffmpeg \
    git \
    && rm -rf /var/lib/apt/lists/*

# Install Python dependencies
RUN pip install --no-cache-dir \
    openai-whisper \
    torch \
    torchaudio

# Copy application code (if you have custom scripts)
# COPY . .

# Set default command
CMD ["whisper", "--help"]

Image bauen

docker build -t whisper:latest .

Basis-Container ausführen

docker run --rm whisper:latest whisper --version

Dockerfile mit API-Server

Für den Produktiveinsatz wollen Sie oft einen API-Server. Hier ein vollständigeres Dockerfile:
FROM python:3.10-slim

WORKDIR /app

# Install system dependencies
RUN apt-get update && apt-get install -y \
    ffmpeg \
    git \
    curl \
    && rm -rf /var/lib/apt/lists/*

# Install Python dependencies
RUN pip install --no-cache-dir \
    openai-whisper \
    torch \
    torchaudio \
    fastapi \
    uvicorn \
    python-multipart

# Create directories for audio and output
RUN mkdir -p /app/audio /app/output

# Copy application code
COPY app.py .
COPY requirements.txt .

# Expose API port
EXPOSE 8000

# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
    CMD curl -f http://localhost:8000/health || exit 1

# Run API server
CMD ["uvicorn", "app.py:app", "--host", "0.0.0.0", "--port", "8000"]

Beispiel-API-Server (app.py)

from fastapi import FastAPI, File, UploadFile
from fastapi.responses import JSONResponse
import whisper
import os

app = FastAPI()

# Load Whisper model (can be configured via env)
model_name = os.getenv("WHISPER_MODEL", "base")
model = whisper.load_model(model_name)

@app.get("/health")
def health():
    return {"status": "healthy"}

@app.post("/transcribe")
async def transcribe(file: UploadFile = File(...)):
    # Save uploaded file
    file_path = f"/app/audio/{file.filename}"
    with open(file_path, "wb") as f:
        content = await file.read()
        f.write(content)
    
    # Transcribe
    result = model.transcribe(file_path)
    
    # Clean up
    os.remove(file_path)
    
    return JSONResponse(content={
        "text": result["text"],
        "language": result["language"]
    })

requirements.txt

fastapi==0.104.1
uvicorn[standard]==0.24.0
python-multipart==0.0.6
openai-whisper
torch
torchaudio

Docker-Compose-Setup

Für ein vollständiges Setup mit mehreren Diensten nutzen Sie Docker Compose:

docker-compose.yml

version: '3.8'

services:
  whisper-api:
    build: .
    container_name: whisper-api
    ports:
      - "8000:8000"
    volumes:
      - ./audio:/app/audio
      - ./output:/app/output
    environment:
      - WHISPER_MODEL=base
      - CUDA_VISIBLE_DEVICES=0
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

  # Optional: Redis for queue management
  redis:
    image: redis:7-alpine
    container_name: whisper-redis
    ports:
      - "6379:6379"
    volumes:
      - redis-data:/data
    restart: unless-stopped

volumes:
  redis-data:

Mit Docker Compose ausführen

# Start services
docker-compose up -d

# View logs
docker-compose logs -f whisper-api

# Stop services
docker-compose down

GPU-Unterstützung mit Docker

Für GPU-Beschleunigung benötigen Sie die NVIDIA-Docker-Runtime:

NVIDIA Docker installieren

Ubuntu/Debian:
# Add NVIDIA Docker repository
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
    sudo tee /etc/apt/sources.list.d/nvidia-docker.list

# Install
sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker

Dockerfile mit GPU-Unterstützung

FROM nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04

WORKDIR /app

# Install Python
RUN apt-get update && apt-get install -y \
    python3.10 \
    python3-pip \
    ffmpeg \
    git \
    curl \
    && rm -rf /var/lib/apt/lists/*

# Install Python dependencies with CUDA support
RUN pip3 install --no-cache-dir \
    openai-whisper \
    torch \
    torchaudio \
    --index-url https://download.pytorch.org/whl/cu118

# Install API dependencies
RUN pip3 install --no-cache-dir \
    fastapi \
    uvicorn \
    python-multipart

COPY app.py .
EXPOSE 8000

CMD ["uvicorn", "app.py:app", "--host", "0.0.0.0", "--port", "8000"]

Mit GPU ausführen

# Using docker run
docker run --gpus all -p 8000:8000 whisper-gpu:latest

# Using docker-compose

docker-compose.yml mit GPU

version: '3.8'

services:
  whisper-api:
    build: .
    container_name: whisper-api-gpu
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
    ports:
      - "8000:8000"
    volumes:
      - ./audio:/app/audio
      - ./output:/app/output
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

Optimiertes Dockerfile für die Produktion

Hier ein produktionsreifes Dockerfile mit Optimierungen:
# Multi-stage build for smaller image
FROM python:3.10-slim as builder

WORKDIR /app

# Install build dependencies
RUN apt-get update && apt-get install -y \
    gcc \
    g++ \
    git \
    && rm -rf /var/lib/apt/lists/*

# Install Python packages
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt

# Final stage
FROM python:3.10-slim

WORKDIR /app

# Install runtime dependencies only
RUN apt-get update && apt-get install -y \
    ffmpeg \
    curl \
    && rm -rf /var/lib/apt/lists/* \
    && apt-get clean

# Copy Python packages from builder
COPY --from=builder /root/.local /root/.local

# Make sure scripts in .local are usable
ENV PATH=/root/.local/bin:$PATH

# Create non-root user for security
RUN useradd -m -u 1000 whisper && \
    mkdir -p /app/audio /app/output && \
    chown -R whisper:whisper /app

USER whisper

# Copy application code
COPY --chown=whisper:whisper app.py .
COPY --chown=whisper:whisper requirements.txt .

EXPOSE 8000

HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
    CMD curl -f http://localhost:8000/health || exit 1

CMD ["uvicorn", "app.py:app", "--host", "0.0.0.0", "--port", "8000"]

Vorteile des mehrstufigen Builds

  • kleineres Image – nur Laufzeitabhängigkeiten im finalen Image
  • schnellere Builds – Build-Abhängigkeiten separat cachen
  • bessere Sicherheit – Non-Root-Nutzer, minimale Angriffsfläche

Umgebungsvariablen

Machen Sie Ihr Docker-Setup per Umgebungsvariablen konfigurierbar:

Dockerfile

FROM python:3.10-slim

WORKDIR /app

RUN apt-get update && apt-get install -y \
    ffmpeg \
    git \
    curl \
    && rm -rf /var/lib/apt/lists/*

RUN pip install --no-cache-dir \
    openai-whisper \
    torch \
    torchaudio \
    fastapi \
    uvicorn \
    python-multipart

COPY app.py .

# Environment variables with defaults
ENV WHISPER_MODEL=base
ENV MAX_FILE_SIZE=100MB
ENV LOG_LEVEL=INFO

EXPOSE 8000

CMD ["uvicorn", "app.py:app", "--host", "0.0.0.0", "--port", "8000"]

docker-compose.yml mit Umgebungsvariablen

version: '3.8'

services:
  whisper-api:
    build: .
    ports:
      - "8000:8000"
    volumes:
      - ./audio:/app/audio
      - ./output:/app/output
    environment:
      - WHISPER_MODEL=small
      - MAX_FILE_SIZE=200MB
      - LOG_LEVEL=DEBUG
      - CUDA_VISIBLE_DEVICES=0
    env_file:
      - .env
    restart: unless-stopped

.env-Datei

WHISPER_MODEL=small
MAX_FILE_SIZE=200MB
LOG_LEVEL=INFO
CUDA_VISIBLE_DEVICES=0

Volume-Verwaltung

Eine sinnvolle Volume-Konfiguration sorgt für dauerhafte Daten:

docker-compose.yml mit Volumes

version: '3.8'

services:
  whisper-api:
    build: .
    ports:
      - "8000:8000"
    volumes:
      # Bind mount for development
      - ./audio:/app/audio
      - ./output:/app/output
      
      # Named volume for model cache (persists across containers)
      - whisper-models:/root/.cache/whisper
      
      # Config volume
      - ./config:/app/config:ro
    environment:
      - WHISPER_MODEL=base

volumes:
  whisper-models:
    driver: local

Vorteile

  • Modell-Caching – Modelle einmal herunterladen, in Containern wiederverwenden
  • Datenhaltbarkeit – Ausgabedateien über Container-Neustarts hinweg
  • Konfiguration – Konfigurationen ohne Rebuild anpassen

Health Checks und Monitoring

Dockerfile mit Health Check

FROM python:3.10-slim

WORKDIR /app

RUN apt-get update && apt-get install -y \
    ffmpeg \
    curl \
    && rm -rf /var/lib/apt/lists/*

RUN pip install --no-cache-dir \
    openai-whisper \
    fastapi \
    uvicorn

COPY app.py .

# Health check endpoint
HEALTHCHECK --interval=30s \
            --timeout=10s \
            --start-period=40s \
            --retries=3 \
            CMD curl -f http://localhost:8000/health || exit 1

EXPOSE 8000
CMD ["uvicorn", "app.py:app", "--host", "0.0.0.0", "--port", "8000"]

Health-Check-Endpunkt

from fastapi import FastAPI
import whisper

app = FastAPI()
model = whisper.load_model("base")

@app.get("/health")
def health():
    try:
        # Quick test transcription
        return {"status": "healthy", "model": "base"}
    except Exception as e:
        return {"status": "unhealthy", "error": str(e)}, 503

Typische Anwendungsfälle

Anwendungsfall 1: Entwicklungsumgebung

version: '3.8'

services:
  whisper-dev:
    build:
      context: .
      dockerfile: Dockerfile.dev
    volumes:
      - .:/app
      - /app/__pycache__
    ports:
      - "8000:8000"
    environment:
      - WHISPER_MODEL=tiny
      - DEBUG=true
    command: uvicorn app.py:app --reload --host 0.0.0.0 --port 8000

Anwendungsfall 2: Produktion mit Warteschlange

version: '3.8'

services:
  whisper-api:
    build: .
    ports:
      - "8000:8000"
    environment:
      - REDIS_URL=redis://redis:6379
      - WHISPER_MODEL=small
    depends_on:
      - redis
      - worker

  worker:
    build: .
    command: python worker.py
    environment:
      - REDIS_URL=redis://redis:6379
      - WHISPER_MODEL=small
    volumes:
      - ./audio:/app/audio
    depends_on:
      - redis

  redis:
    image: redis:7-alpine
    volumes:
      - redis-data:/data

volumes:
  redis-data:

Anwendungsfall 3: Mehrere Modelle

version: '3.8'

services:
  whisper-fast:
    build: .
    ports:
      - "8001:8000"
    environment:
      - WHISPER_MODEL=tiny
      - PORT=8000

  whisper-balanced:
    build: .
    ports:
      - "8002:8000"
    environment:
      - WHISPER_MODEL=base
      - PORT=8000

  whisper-accurate:
    build: .
    ports:
      - "8003:8000"
    environment:
      - WHISPER_MODEL=large
      - PORT=8000

Bewährte Verfahren

1. Spezifische Basis-Images verwenden

Schlecht:
FROM python:latest
Gut:
FROM python:3.10-slim

2. Schichten minimieren

Schlecht:
RUN apt-get update
RUN apt-get install -y ffmpeg
RUN apt-get install -y git
Gut:
RUN apt-get update && apt-get install -y \
    ffmpeg \
    git \
    && rm -rf /var/lib/apt/lists/*

3. .dockerignore nutzen

.dockerignore anlegen:
__pycache__
*.pyc
*.pyo
*.pyd
.Python
.env
.venv
venv/
.git
.gitignore
README.md
*.md
.DS_Store

4. Ressourcenlimits setzen

services:
  whisper-api:
    build: .
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 4G
        reservations:
          cpus: '1'
          memory: 2G

5. Health Checks verwenden

Für Produktionscontainer immer Health Checks einplanen:
HEALTHCHECK --interval=30s --timeout=10s CMD curl -f http://localhost:8000/health || exit 1

6. Non-Root-Benutzer

Container als Non-Root ausführen:
RUN useradd -m -u 1000 whisper
USER whisper

7. Modelle cachen

Volumes zum Cachen heruntergeladener Modelle nutzen:
volumes:
  - whisper-models:/root/.cache/whisper

Häufige Probleme

Problem 1: Container beendet sich sofort

Problem: Container startet und beendet sich gleich wieder
Lösung:
# Check logs
docker logs <container-id>

# Run interactively to debug
docker run -it whisper:latest /bin/bash

Problem 2: GPU nicht verfügbar

Problem: GPU wird im Container nicht erkannt
Lösung:
# Verify NVIDIA Docker
docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi

# Check runtime
docker info | grep -i runtime

Problem 3: Speicher voll

Problem: Container geht dem Speicher aus
Lösung:
# Increase memory limit
deploy:
  resources:
    limits:
      memory: 8G

Problem 4: Langsamer Modelldownload

Problem: Modelle werden bei jedem Start neu geladen
Lösung:
# Use volume for model cache
volumes:
  - whisper-models:/root/.cache/whisper

Problem 5: Zugriff verweigert

Problem: Schreiben auf Volumes nicht möglich
Lösung:
# Fix permissions in Dockerfile
RUN chown -R whisper:whisper /app

Leistungsoptimierung

1. Modell vorladen

Modelle im Dockerfile vorladen:
# Download model during build
RUN python -c "import whisper; whisper.load_model('base')"

2. Faster-Whisper nutzen

Für bessere Performance: faster-whisper:
RUN pip install --no-cache-dir faster-whisper

3. Multithreading

Worker-Prozesse konfigurieren:
CMD ["uvicorn", "app.py:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "4"]

4. Ressourcen zuweisen

Passende Ressourcen zuweisen:
deploy:
  resources:
    limits:
      cpus: '4'
      memory: 8G

Sicherheit

1. Offizielle Basis-Images

FROM python:3.10-slim  # Official Python image

2. Auf Schwachstellen prüfen

docker scan whisper:latest

3. Images aktuell halten

Basis-Images und Abhängigkeiten regelmäßig aktualisieren:
FROM python:3.10-slim  # Use latest patch version
RUN pip install --upgrade pip

4. Netzwerkzugriff begrenzen

services:
  whisper-api:
    build: .
    networks:
      - internal
    # No external ports if accessed via reverse proxy

Fazit

Whisper in Docker zu packen liefert eine robuste, skalierbare Lösung für Sprache-zu-Text. Wichtige Punkte:
  1. Einfach starten – mit einem einfachen Dockerfile beginnen
  2. Docker Compose nutzen – mehrere Dienste vereinfachen
  3. GPU aktivieren – für Produktionsleistung
  4. Best Practices – Sicherheit, Optimierung, Monitoring
  5. Gründlich testen – vor dem Produktions-Deployment
Mit einem durchdachten Docker-Setup können Sie Whisper konsistent in jeder Umgebung bereitstellen – von der lokalen Entwicklung bis zur Cloud-Produktion.

Nächste Schritte

  • Ersten Container bauen – mit dem einfachen Dockerfile starten
  • GPU-Unterstützung – wenn NVIDIA-GPUs verfügbar sind
  • Docker Compose einrichten – für den gesamten Anwendungsstack
  • In der Cloud deployen – Containerdienste der Cloud nutzen (ECS, GKE, AKS)
Weitere Deployment-Strategien finden Sie in unseren Leitfäden zu Whisper Cloud Deployment und Whisper API vs Local Deployment.

Jetzt kostenlos testen

Testen Sie jetzt unseren KI‑basierten Dienst für Sprache, Audio und Video. Sie erhalten nicht nur hochpräzise Sprach‑zu‑Text‑Transkription, mehrsprachige Übersetzung und intelligente Sprechertrennung, sondern auch automatische Untertitelgenerierung für Videos, intelligente Bearbeitung von Audio‑ und Videoinhalten sowie synchronisierte Audio‑/Bild‑Analyse. Damit decken Sie alle Szenarien ab – von Meeting‑Protokollen über Short‑Video‑Produktion bis hin zur Podcast‑Erstellung. Starten Sie noch heute Ihre kostenlose Testphase!

Sound zu Text OnlineSound zu Text KostenlosSound zu Text KonverterSound zu Text MP3Sound zu Text WAVSound zu Text mit ZeitstempelSprache zu Text für MeetingsSound to Text Multi LanguageSound zu Text UntertitelWAV in Text konvertierenStimme zu TextStimme zu Text OnlineSprache zu TextMP3 in Text konvertierenSprachaufnahme zu TextOnline SpracheingabeStimme zu Text mit ZeitstempelnStimme zu Text in EchtzeitStimme zu Text für lange AudioStimme zu Text für VideoSprache zu Text für YouTubeSprache zu Text für VideobearbeitungSprache zu Text für UntertitelSprache zu Text für PodcastsSprache zu Text für InterviewsInterview-Audio zu TextSprache zu Text für AufnahmenSprache zu Text für MeetingsSprache zu Text für VorlesungenSprache zu Text für NotizenStimme zu Text MehrsprachigStimme zu Text PräziseStimme zu Text SchnellPremiere Pro Stimme zu Text AlternativeDaVinci Stimme zu Text AlternativeVEED Stimme zu Text AlternativeInVideo Stimme zu Text AlternativeOtter.ai Stimme zu Text AlternativeDescript Stimme zu Text AlternativeTrint Stimme zu Text AlternativeRev Stimme zu Text AlternativeSonix Stimme zu Text AlternativeHappy Scribe Stimme zu Text AlternativeZoom Stimme zu Text AlternativeGoogle Meet Stimme zu Text AlternativeMicrosoft Teams Stimme zu Text AlternativeFireflies.ai Stimme zu Text AlternativeFathom Stimme zu Text AlternativeFlexClip Stimme zu Text AlternativeKapwing Stimme zu Text AlternativeCanva Stimme zu Text AlternativeSprache-zu-Text für lange AudioKI Sprache zu TextKostenlose Sprache zu TextSprache zu Text ohne WerbungSprache zu Text für lautes AudioSprache zu Text mit ZeitUntertitel aus Audio generierenPodcast-Transkription OnlineKundengespräche TranskribierenTikTok Sprache zu TextTikTok Audio zu TextYouTube Sprache zu TextYouTube Audio zu TextSprachnotiz zu TextWhatsApp-Sprachnachricht zu TextTelegram-Sprachnachricht zu TextDiscord-Anruf-TranskriptionTwitch-Sprache zu TextSkype-Sprache zu TextMessenger-Sprache zu TextLINE-Sprachnachricht zu TextVlogs in Text transkribierenPredigt-Audio in Text konvertierenSprache in Schrift umwandelnAudio in Text übersetzenAudio-Notizen in Text umwandelnSpracheingabeSpracheingabe für BesprechungenSpracheingabe für YouTubeSprechen statt TippenFreihändiges TippenStimme zu WörternSprache zu WörternSprache zu Text OnlineOnline Transcription SoftwareSprache zu Text für BesprechungenSchnelle Sprache zu TextReal Time Speech to TextLive Transcription AppSprache zu Text für TikTokTon zu Text für TikTokSprechen zu WörternSprache zu TextTalk to Text FreeTalk to Text OnlineTalk to Text for YouTubeTalk to Text for SubtitlesTalk to Text for Content CreatorsTalk to Text for MeetingsAudio zu TippenTon zu TextSprach-SchreibwerkzeugSprach-SchreibwerkzeugSprachdiktatRechtliche Transkriptions-ToolMedizinisches Diktier-ToolJapanische Audio-TranskriptionKoreanische Meeting-TranskriptionMeeting-Transkriptions-ToolMeeting-Audio zu TextVorlesung-zu-Text-KonverterVorlesungs-Audio zu TextVideo-zu-Text-TranskriptionUntertitel-Generator für TikTokCall-Center-TranskriptionReels Audio zu Text ToolMP3 in Text transkribierenWAV-Datei in Text transkribierenCapCut Sprache zu TextCapCut Sprache zu TextVoice to Text in EnglishAudio zu Text EnglischVoice to Text in SpanishVoice to Text in FrenchAudio zu Text FranzösischVoice to Text in GermanAudio zu Text DeutschVoice to Text in JapaneseAudio zu Text JapanischVoice to Text in KoreanAudio zu Text KoreanischVoice to Text in PortugueseVoice to Text in ArabicVoice to Text in ChineseVoice to Text in HindiVoice to Text in RussianWeb Voice Typing ToolVoice Typing Website