Kolibri Learning Platform: the offline app for universal education
100K+
Kolibri Learning Platform: the offline-first platform for teaching and learning with technology without requiring the Internet.
Developed with and for the community by Learning Equality.
Note
All examples use `docker` but should also work with `podman`
docker run -d \
-v ~/.kolibri:/kolibri \
-p 8080:8080 \
-p 8081:8081 \
learningequality/kolibri:latest
Then access Kolibri at http://localhost:8080.
You must mount storage to /kolibri. This can be any mount type (bind mount, named volume, etc.), and is where Kolibri stores all its data including:
Without a mounted /kolibri path, the container will refuse to start. Use a consistent mount so Kolibri data persists predictably across container updates and restarts.
Kolibri requires persistent storage for:
The image exposes two ports:
| Port | Purpose |
|---|---|
| 8080 | Main Kolibri web server |
| 8081 | Zip content server (for serving content from .zip archives) |
Both ports should be exposed when running the container. The zip content port is required for Kolibri to serve content from compressed archive files (H5P, Perseus, etc.).
| Variable | Default | Description |
|---|---|---|
KOLIBRI_HOME | /kolibri | Directory for Kolibri data (must be mounted) |
KOLIBRI_HTTP_PORT | 8080 | Port for the main web server |
KOLIBRI_ZIP_CONTENT_PORT | 8081 | Port for zip content server |
MORANGO_SYSTEM_ID | (auto-generated) | Morango system ID (auto-set from stored node ID) |
MORANGO_NODE_ID | (auto-generated) | Morango node ID (auto-set from stored node ID) |
docker run -d \
-v /srv/kolibri:/kolibri \
-p 8080:8080 \
-p 8081:8081 \
--name kolibri \
learningequality/kolibri:latest
docker run -d \
-v /srv/kolibri:/kolibri \
-p 8080:8080 \
-p 8081:8081 \
learningequality/kolibri:0.19.0
compose.yml:
services:
kolibri:
image: learningequality/kolibri:latest
ports:
- "8080:8080"
- "8081:8081"
volumes:
- ./kolibri-data:/kolibri
restart: unless-stopped
docker compose up -d
docker logs -f kolibri
docker exec -it kolibri kolibri manage --help
latest - Latest stable release0.19 - Latest patch release for version 0.19.x0.19.0 - Specific versionThis image is built for multiple architectures:
linux/amd64 (x86_64)linux/arm64 (ARM 64-bit)The correct image is automatically pulled based on your system architecture.
Since Docker or Podman rootless modes already provide some protection, by mapping root inside the container to the user on the host, Kolibri runs as root in the container. This should ensure that the files written to the KOLIBRI_HOME mount should match the user outside the container.
The default installation modes for Docker and Podman align user IDs for root with the host's root user. This may not be ideal, especially for files written to the KOLIBRI_HOME mount point. Therefore, the entrypoint for the image:
kolibri)kolibri UID with the mount pointgosuIf you see the error ERROR: /kolibri must be a mounted volume, ensure you've added a volume mount.
# Wrong - no volume mount
docker run learningequality/kolibri:latest
# Correct - with volume mount
docker run -v /path/to/data:/kolibri learningequality/kolibri:latest
If you encounter permission errors, ensure the mounted directory is writable by your host user (myuser):
chown -R myuser:myuser /path/to/data
Content type
Image
Digest
sha256:19810f674…
Size
163.5 MB
Last updated
2 months ago
docker pull learningequality/kolibri