Open WebUI is unhealthy on first start and docker compose up --wait fails

On a fresh volume, Open WebUI's first start can take longer than its image's HEALTHCHECK allows. Docker marks the container unhealthy and docker compose up --wait fails, although the container keeps running. A 120-second start_period fixed it.

Recorded 12 October 2026

Environment

Operating system
Ubuntu 24.04.5 LTS (GitHub Actions ubuntu-24.04 runner, image 20261004.327.1)
Runs on
GitHub Actions hosted runner
Versions
Docker Engine 28.0.4Docker Compose 2.38.2Open WebUI v0.11.4Ollama 0.40.2

The versions are those recorded for run 38256885780. The failing run, 38210088287, ran the same workflow on the same runner label.

Symptom

In runtime-verify run 38210088287, the target open-webui__default__caddy failed with up-wait-failed: docker compose up --wait returned an error because the open-webui container was unhealthy. Five other apps in the same run passed.

The container itself kept running and turned healthy once the app answered, so the failure was transient.

Root cause

The Open WebUI image (v0.11.4) defines its own HEALTHCHECK with Docker's defaults: a 30-second interval, 3 retries and no start period. A first start on an empty volume (database migrations, the embedding model) can take more than about 90 seconds, so three failed probes mark the container unhealthy before the app is up.

docker compose up --wait waits for every service to be running or healthy, and treats unhealthy as a failure.

Fix

Give the image's HEALTHCHECK a start period without replacing its test: a Compose healthcheck block with start_period only. Docker keeps the image's test, interval, timeout and retries. Failed probes during the start period don't count, and a probe that passes earlier makes the container healthy at once.

ANAROQ's Open WebUI template sets start_period: 120s since profile version 1.2.0. In run 38256885780 all eight Open WebUI runs reached healthy in about 30 seconds, including default__caddy.

Commands

Compose: a start period for the image's own HEALTHCHECK
services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:v0.11.4
    healthcheck:
      start_period: 120s
Start the stack and wait for every service
docker compose up -d --wait
Watch the health probes of a container
docker inspect --format '{{json .State.Health}}' <container>

Evidence

Run report The failing target and its result, from the run's report.

Source: runtime-verify run 38210088287

open-webui__default__caddy  up-wait-failed  (open-webui: unhealthy)
Run report The same template with start_period: 120s, profile version 1.2.0.

Source: runtime-verify run 38256885780

open-webui  8 runs (default, extra-model-true × 4 exposure modes)  8/8 passed  profileVersion 1.2.0

Sources

This note comes from ANAROQ's own verification records, which stay in the project's repository.

How profiles and verified Compose files are built is described in the methodology. Read the methodology

All field notes