Kennen Sie das Gefühl? Sie haben begeistert von Ollama und seiner Fähigkeit, große Sprachmodelle (LLMs) lokal auszuführen, gehört. Sie haben auch das Ollama WebUI entdeckt, eine fantastische Benutzeroberfläche, um diese Modelle bequem im Browser zu nutzen. Doch dann kommt die Ernüchterung: Sie richten beides in Docker ein, und plötzlich funktioniert nichts. Die WebUI kann keine Verbindung zu Ollama herstellen, Fehlermeldungen wie „Network Error” oder „Could not connect to Ollama” tauchen auf, und die anfängliche Begeisterung weicht schnell Frustration. Willkommen im Club der Docker-Kopfschmerzen!
Sie sind nicht allein. Konnektivitätsprobleme zwischen Docker-Containern oder zwischen einem Container und dem Host sind eine der häufigsten Hürden, auf die Neulinge (und manchmal auch erfahrene Nutzer) im Docker-Universum stoßen. Besonders wenn es um Anwendungen geht, die miteinander kommunizieren müssen, wie Ollama und sein WebUI, werden die Fallstricke des Docker-Netzwerks schnell offensichtlich. Aber keine Sorge, in diesem umfassenden Artikel führen wir Sie Schritt für Schritt durch die Ursachen dieser Probleme und präsentieren Ihnen bewährte Lösungen, damit Sie Ihre LLMs endlich störungsfrei nutzen können.
Warum treten diese nervigen Konnektivitätsprobleme überhaupt auf?
Die Magie von Docker liegt in seiner Isolation. Jeder Container läuft in seiner eigenen, gekapselten Umgebung. Das betrifft nicht nur das Dateisystem und die Prozesse, sondern eben auch das Netzwerk. Standardmäßig erstellt Docker ein sogenanntes Bridge-Netzwerk. Container, die an dasselbe Bridge-Netzwerk angeschlossen sind, können über ihre Containernamen miteinander kommunizieren. Container in verschiedenen Netzwerken oder solche, die direkt auf dem Host laufen, sehen sich aber nicht automatisch.
Das Kernproblem ist oft die Annahme, dass localhost
oder 127.0.0.1
innerhalb eines Containers den Host oder einen anderen Container repräsentiert. Das ist jedoch nicht der Fall! localhost
in einem Container bezieht sich immer auf den Container selbst. Wenn Ihr Ollama WebUI also versucht, sich mit localhost:11434
zu verbinden, sucht es nach einem Ollama-Server *im selben WebUI-Container*, nicht im separaten Ollama-Container oder auf Ihrem Host.
Hinzu kommt, dass der Ollama-Server standardmäßig auf Port 11434
lauscht und das Ollama WebUI eine Umgebungsvariable wie OLLAMA_HOST
benötigt, um zu wissen, wo es Ollama finden kann.
Typische Szenarien, die zu Problemen führen:
- Ollama in Docker, WebUI direkt auf dem Host: Das WebUI auf Ihrem Host versucht, Ollama im Container über
localhost
zu erreichen. Das geht nicht direkt, da der Port des Containers nicht automatisch auf den Host gemappt wird oder der Host den Containernamen nicht auflösen kann. - WebUI in Docker, Ollama direkt auf dem Host: Umgekehrt versucht der WebUI-Container, den Ollama-Server auf dem Host zu finden. Auch hier ist
localhost
falsch. Der Container müsste die IP-Adresse des Host-Systems kennen. - Beide in separaten Docker-Containern (ohne Docker Compose oder explizitem Netzwerk): Das ist der klassische Fall. Zwei Container, isoliert voneinander, versuchen, über
localhost
zu kommunizieren und scheitern kläglich.
Verstanden? Gut. Jetzt krempeln wir die Ärmel hoch und lösen das Problem!
Die Lösungen: Von einfach bis robust
Es gibt verschiedene Wege, diese Konnektivitätsprobleme zu lösen. Wir beginnen mit einer schnellen, aber weniger isolierten Methode und arbeiten uns zur empfohlenen, robusten Lösung mit Docker Compose vor.
Lösung 1: Der „Host”-Netzwerkmodus (Schnell & Einfach, aber weniger isoliert)
Wenn Sie nur einen der Dienste (meist Ollama, da es der „Server” ist) im Host-Netzwerkmodus starten, wird dieser Container direkt an das Netzwerk des Host-Systems angeschlossen. Er teilt sich die Netzwerkschnittstellen und Ports mit dem Host. Das bedeutet, dass er über localhost
(vom Host aus gesehen) erreichbar ist.
Wie es funktioniert:
Starten Sie Ihren Ollama-Container mit der Option --network host
:
docker run -d --network host -v ollama:/root/.ollama --name ollama ollama/ollama
Erklärung:
-d
: Führt den Container im Hintergrund aus.--network host
: Weist Docker an, diesen Container direkt an das Host-Netzwerk anzuschließen. Der Container nutzt dann die IP-Adressen des Host-Systems.-v ollama:/root/.ollama
: Persistiert die Ollama-Daten in einem benannten Volume, damit Ihre Modelle nicht bei jedem Neustart verloren gehen.--name ollama
: Gibt dem Container einen eindeutigen Namen.ollama/ollama
: Das zu verwendende Docker-Image.
Nachdem Ollama auf diese Weise gestartet wurde, können Sie das Ollama WebUI (egal ob als separater Docker-Container oder direkt auf dem Host) konfigurieren, um sich mit http://localhost:11434
zu verbinden. Wenn das WebUI auch in einem Docker-Container läuft, müssen Sie dessen Port zum Host mappen:
docker run -d -p 8080:8080 --add-host host.docker.internal:host-gateway -e OLLAMA_HOST=http://host.docker.internal:11434 --name ollama-webui ghcr.io/ollama-webui/ollama-webui:latest
Wichtiger Hinweis: host.docker.internal
ist ein spezieller DNS-Name, der von Docker Desktop (macOS/Windows) bereitgestellt wird, um vom Container auf den Host zugreifen zu können. Unter Linux benötigen Sie die Option --add-host host.docker.internal:host-gateway
, um eine ähnliche Funktionalität zu erreichen.
Vorteile: Einfach einzurichten für den schnellen Start.
Nachteile: Weniger Isolation. Der Container teilt sich Ports und Netzwerkschnittstellen mit dem Host, was zu Port-Konflikten führen und die Sicherheit leicht verringern kann. Dies ist nicht die „Docker-Way”-Lösung für die Produktion.
Lösung 2: Die elegante Methode mit Docker Compose (Empfohlen!)
Docker Compose ist das Werkzeug der Wahl für die Definition und Ausführung von Multi-Container-Docker-Anwendungen. Es ermöglicht Ihnen, alle Dienste, Netzwerke, Volumes und Konfigurationen in einer einzigen YAML-Datei (docker-compose.yml
) zu definieren. Das ist nicht nur übersichtlich, sondern löst auch elegant die Netzwerkprobleme, da Compose standardmäßig ein eigenes Bridge-Netzwerk für alle Dienste in Ihrer Datei erstellt und die Dienste über ihre Namen erreichbar macht.
So erstellen Sie eine docker-compose.yml
-Datei:
Erstellen Sie in einem leeren Verzeichnis eine Datei namens docker-compose.yml
(oder compose.yaml
) mit folgendem Inhalt:
version: '3.8'
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
ports:
- "11434:11434" # Optional: Nur, wenn Sie Ollama direkt vom Host erreichen wollen
volumes:
- ollama_models:/root/.ollama # Persistiert die Modelle
restart: unless-stopped
healthcheck: # Überprüft, ob Ollama bereit ist
test: ["CMD-SHELL", "curl -f http://localhost:11434 || exit 1"]
interval: 1m30s
timeout: 10s
retries: 3
start_period: 30s
ollama-webui:
image: ghcr.io/ollama-webui/ollama-webui:latest
container_name: ollama-webui
build: .
ports:
- "8080:8080" # Der Port, auf dem Sie die WebUI erreichen
environment:
- OLLAMA_HOST=http://ollama:11434 # WICHTIG: Hier den Namen des Ollama-Dienstes verwenden!
- OLLAMA_BASE_URL=http://ollama:11434 # Manchmal auch benötigt, falls OLLAMA_HOST nicht greift
- "UID=1000" # Optional: Für Benutzerrechte im Container (anpassen)
- "GID=1000" # Optional: Für Benutzerrechte im Container (anpassen)
volumes:
- webui_data:/app/backend/data # Persistiert WebUI-Daten (Chats, Einstellungen)
restart: unless-stopped
depends_on:
ollama:
condition: service_healthy # Stellt sicher, dass Ollama läuft, bevor WebUI startet
volumes:
ollama_models:
webui_data:
Erklärung der docker-compose.yml
:
version: '3.8'
: Definiert die Compose-Dateiversion.services:
: Hier werden Ihre einzelnen Anwendungen/Container definiert.ollama:
(Dienst für Ollama)image: ollama/ollama:latest
: Verwendet das offizielle Ollama Docker-Image.container_name: ollama
: Verleiht dem Container einen leichter zu merkenden Namen.ports: - "11434:11434"
: Mappt den Port 11434 des Containers auf den Port 11434 Ihres Host-Systems. Dies ist optional, wenn nur das WebUI mit Ollama kommunizieren soll und Sie nicht direkt vom Host auf Ollama zugreifen wollen.volumes: - ollama_models:/root/.ollama
: Erstellt ein benanntes Volumeollama_models
, das die heruntergeladenen Modelle und Konfigurationen von Ollama speichert. So bleiben Ihre Modelle auch nach dem Löschen/Neuerstellen des Containers erhalten.restart: unless-stopped
: Stellt sicher, dass Ollama automatisch neu startet, falls es abstürzt oder der Docker-Dienst neu gestartet wird.healthcheck:
: Ein wichtiger Block! Er definiert, wie Docker Compose den Gesundheitszustand des Ollama-Dienstes überprüft. Die WebUI wartet darauf, dass Ollama als „healthy” gemeldet wird, bevor sie versucht zu starten.
ollama-webui:
(Dienst für Ollama WebUI)image: ghcr.io/ollama-webui/ollama-webui:latest
: Verwendet das offizielle Ollama WebUI Docker-Image.container_name: ollama-webui
: Verleiht dem Container einen Namen.ports: - "8080:8080"
: Mappt den Port 8080 des WebUI-Containers auf den Port 8080 Ihres Host-Systems. Diesen Port verwenden Sie, um die WebUI in Ihrem Browser zu erreichen (http://localhost:8080
).environment:
: Hier werden Umgebungsvariablen an den Container übergeben.- OLLAMA_HOST=http://ollama:11434
: DAS ist der entscheidende Punkt! Da beide Container im selben Compose-Netzwerk laufen, können sie sich über ihre Dienstnamen ansprechen.ollama
ist der Name des Dienstes, den wir für den Ollama-Container definiert haben. So weiß die WebUI, wo sie Ollama finden kann.- OLLAMA_BASE_URL=http://ollama:11434
: In einigen Fällen kann auch diese Variable erforderlich sein, um sicherzustellen, dass alle internen Verweise des WebUI korrekt sind.UID
undGID
: Optional, kann nützlich sein, wenn Sie Berechtigungsprobleme mit den Volumes haben. Passen Sie diese an die UID/GID Ihres Benutzers auf dem Host an.
volumes: - webui_data:/app/backend/data
: Ein weiteres benanntes Volume für die Persistenz der WebUI-Daten (Chats, Einstellungen).restart: unless-stopped
: Wie beim Ollama-Dienst.depends_on: ollama: condition: service_healthy
: Garantiert, dass der WebUI-Container erst startet, wenn der Ollama-Dienst vollständig hochgefahren und als „healthy” erkannt wurde. Das vermeidet Fehlermeldungen beim Start des WebUI.
volumes:
: Definiert die benannten Volumes, die in den Diensten verwendet werden.
So starten Sie die Dienste:
Navigieren Sie im Terminal in das Verzeichnis, in dem Sie die docker-compose.yml
-Datei gespeichert haben, und führen Sie folgenden Befehl aus:
docker compose up -d
Erklärung:
docker compose up
: Startet alle in derdocker-compose.yml
definierten Dienste.-d
: Führt die Container im „detached” Modus aus, d.h., sie laufen im Hintergrund weiter, und Sie können Ihr Terminal schließen.
Sobald die Dienste gestartet sind (es kann einen Moment dauern, bis Ollama bereit ist und Modelle geladen hat), können Sie Ihr Ollama WebUI unter http://localhost:8080
in Ihrem Browser aufrufen. Es sollte nun reibungslos mit Ihrem Ollama-Backend kommunizieren können!
Lösung 3: Manuelles Bridge-Netzwerk (Für fortgeschrittene Szenarien)
Auch wenn Docker Compose die empfohlene Methode ist, ist es hilfreich zu wissen, wie Docker-Netzwerke manuell funktionieren. Sie können ein benutzerdefiniertes Bridge-Netzwerk erstellen und dann beide Container daran anschließen.
Schritt 1: Netzwerk erstellen
docker network create ollama-net
Schritt 2: Ollama-Container starten
docker run -d --network ollama-net -v ollama:/root/.ollama --name ollama ollama/ollama
Schritt 3: Ollama WebUI-Container starten
docker run -d -p 8080:8080 --network ollama-net -e OLLAMA_HOST=http://ollama:11434 --name ollama-webui ghcr.io/ollama-webui/ollama-webui:latest
Auch hier ist OLLAMA_HOST=http://ollama:11434
der Schlüssel. Da beide Container im ollama-net
laufen, kann der WebUI-Container Ollama über seinen Containernamen ansprechen.
Allgemeine Fehlersuche und nützliche Tipps
Manchmal laufen Dinge nicht wie geplant. Hier sind einige Schritte zur Fehlerbehebung:
- Logs prüfen: Das ist der erste Schritt bei jedem Docker-Problem.
- Für Ollama:
docker logs ollama
- Für Ollama WebUI:
docker logs ollama-webui
- Mit Docker Compose:
docker compose logs
(zeigt Logs aller Dienste) oderdocker compose logs ollama
- Achten Sie auf Fehlermeldungen wie „Connection refused”, „Network error” oder „host not found”.
- Für Ollama:
- Container-Status prüfen: Stellen Sie sicher, dass beide Container laufen.
docker ps
: Zeigt alle laufenden Container an.
- Netzwerkkonfiguration prüfen:
docker inspect
: Liefert detaillierte Informationen über einen Container, einschließlich seiner Netzwerkkonfiguration und IP-Adresse.docker network inspect
: Zeigt Details zu einem bestimmten Netzwerk an, einschließlich der daran angeschlossenen Container.
- Konnektivität innerhalb der Container testen:
- Öffnen Sie eine Shell im WebUI-Container:
docker exec -it ollama-webui sh
(oderbash
). - Versuchen Sie dann, Ollama zu pingen:
ping ollama
. (Sie sollten eine Antwort von der IP-Adresse des Ollama-Containers erhalten.) - Versuchen Sie, Ollama per cURL zu erreichen:
curl http://ollama:11434/api/tags
(Sollte eine JSON-Antwort der geladenen Modelle liefern, wenn Ollama läuft.)
- Öffnen Sie eine Shell im WebUI-Container:
- Firewall-Einstellungen: Stellen Sie sicher, dass keine Host-Firewall (z.B.
ufw
unter Linux, Windows Defender Firewall) die Kommunikation auf den gemappten Ports (z.B. 8080 oder 11434) blockiert. - Umgebungsvariablen: Überprüfen Sie sorgfältig die Umgebungsvariablen, insbesondere
OLLAMA_HOST
undOLLAMA_BASE_URL
. Ein Tippfehler oder ein falscher Wert kann alles zum Erliegen bringen. - Neustart: Manchmal hilft ein kompletter Neustart.
docker compose down
(stoppt und entfernt Container/Netzwerke) gefolgt vondocker compose up -d
.
Fazit: Weniger Kopfschmerzen, mehr LLMs!
Die anfänglichen Docker-Kopfschmerzen bei der Verbindung von Ollama und Ollama WebUI sind ein häufiges Phänomen, das primär auf das isolierte Docker-Netzwerkmodell zurückzuführen ist. Doch wie wir gesehen haben, gibt es elegante und robuste Lösungen.
Die Verwendung von Docker Compose ist zweifellos der Königsweg. Sie ermöglicht Ihnen, Ihre gesamte Anwendungsumgebung deklarativ zu definieren, macht die Konnektivität zwischen Diensten trivial (dank der Auflösung über Dienstnamen) und erleichtert die Verwaltung erheblich. Mit einer gut konfigurierten docker-compose.yml
-Datei können Sie Ihre LLM-Infrastruktur mit einem einzigen Befehl starten und wissen, dass alles wie vorgesehen zusammenarbeitet.
Vergessen Sie localhost
, wenn Sie von einem Container zum anderen sprechen, und umarmen Sie die Dienstnamen! Einmal richtig eingerichtet, wird das Einrichten von Ollama und seinem WebUI zum Kinderspiel, und Sie können sich ganz auf das Experimentieren mit Ihren großen Sprachmodellen konzentrieren, anstatt sich mit frustrierenden Netzwerkproblemen herumzuschlagen. Viel Erfolg und Spaß beim Chatten mit Ihren lokalen LLMs!