Install Open WebUI with Docker – Self-Hosted AI Interface

– min read

I have been running local LLMs with Ollama for a while, but I was missing a proper web interface. Then I found Open WebUI by Timothy Jaeryang Baek – a feature-rich self-hosted AI platform with 50k+ GitHub stars. It connects to Ollama, OpenAI, OpenRouter, and any OpenAI-compatible API. Here is how I set it up with Docker.

GitHub: github.com/open-webui/open-webui
Official docs: docs.openwebui.com
Docker: ghcr.io/open-webui/open-webui


Open WebUI banner
Open WebUI – self-hosted AI platform


What Is Open WebUI?

Open WebUI is a full-featured web interface for running AI models. It works completely offline and supports multiple backends like Ollama, OpenAI API, OpenRouter, vLLM, and more. It also has built-in RAG, image generation, voice calls, and plugin support.

Some features I found useful:

  • Connect to local Ollama models and remote APIs at the same time
  • Built-in RAG with document upload and web search
  • Multi-model conversations – compare responses side by side
  • Voice/video calls with local Whisper STT
  • Image generation with DALL-E, ComfyUI, or Stable Diffusion
  • RBAC with user groups and permissions
  • Plugin system with Filters, Tools, and Skills
  • Persistent memory across conversations


Open WebUI demo screenshot
Open WebUI chat interface showing multi-model conversation


Prerequisites

Before we start, make sure you have Docker installed:

# Check if Docker is installed
docker --version

# Should return something like
# Docker version 27.0.0, build abc123

That is it. One dependency. The container bundles everything else.


Installation with Docker

The simplest way is a single docker run command. This pulls the image, starts the container, and mounts a volume for persistence:

docker run -d -p 3000:8080 \
  --add-host=host.docker.internal:host-gateway \
  -v open-webui:/app/backend/data \
  --name open-webui \
  --restart always \
  ghcr.io/open-webui/open-webui:main

Once running, open http://your-server-ip:3000 in your browser. Create an admin account and you are in.


Option: Bundled with Ollama

If you do not have Ollama installed separately, use the :ollama tag. This image includes both Open WebUI and Ollama in one container:

# With GPU support
docker run -d -p 3000:8080 --gpus=all \
  -v ollama:/root/.ollama \
  -v open-webui:/app/backend/data \
  --name open-webui \
  --restart always \
  ghcr.io/open-webui/open-webui:ollama


Connect to Ollama

If Ollama runs on the same machine, Open WebUI detects it automatically through host.docker.internal. If Ollama is on a different server, set the environment variable:

docker run -d -p 3000:8080 \
  -e OLLAMA_BASE_URL=https://your-ollama-server:11434 \
  -v open-webui:/app/backend/data \
  --name open-webui \
  --restart always \
  ghcr.io/open-webui/open-webui:main


Connect OpenAI or OpenRouter

Open WebUI is not limited to local models. You can connect any OpenAI-compatible API. For OpenRouter:

docker run -d -p 3000:8080 \
  -e OPENAI_API_KEY=sk-or-v1-your-key \
  -e OPENAI_BASE_URL=https://openrouter.ai/api/v1 \
  -v open-webui:/app/backend/data \
  --name open-webui \
  --restart always \
  ghcr.io/open-webui/open-webui:main

Go to Settings > Connections in the web UI to add multiple providers. You can mix local Ollama models with cloud APIs in the same session.


Docker Compose Setup

For a production setup, here is a docker-compose.yml that runs Open WebUI with Ollama as a separate service:

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    restart: always
    volumes:
      - ollama:/root/.ollama
    ports:
      - "11434:11434"

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    restart: always
    depends_on:
      - ollama
    ports:
      - "3000:8080"
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
    volumes:
      - open-webui:/app/backend/data

volumes:
  ollama:
  open-webui:

Run it with:

docker compose up -d


Pull Your First Model

If you used the bundled Ollama setup, SSH into your server and pull a model:

# Pull a small model to test
docker exec ollama ollama pull llama3.2:1b

# Or a larger one
docker exec ollama ollama pull deepseek-coder-v2

Once the model is downloaded, refresh Open WebUI and it appears in the model selector dropdown. Click it, type a message, and you are chatting with a local LLM.


Why I Like It

  • Single container – Docker pulls everything, no dependency hell
  • Local and cloud models – mix Ollama with OpenRouter in the same UI
  • RAG built-in – upload PDFs, docs, and ask questions against them
  • Active development – 50k+ stars, constant updates
  • Mobile-friendly – PWA works great on phone browsers

Open WebUI turned my server into a full AI workstation accessible from any browser. If you run Ollama or use any OpenAI-compatible API, this is the best web interface I have found so far.

Mohamad ZulfahmyCybersecurity · OffSec · Entrepreneur
About me ↗
ON THIS PAGE
On this page