Skip to content

Infrastructure

Moodle™ in Docker after Bitnami: the switch fits in one line

Bitnami’s free Moodle images stopped getting updates in August 2025. This is how to move a campus to a maintained image without exporting anything: same compose file, same volumes, same database and one line changed.

Published 6 min read

For years, the quickest way to run Moodle™ in Docker was Bitnami's image. It had good documentation, clear variables and an example compose file that worked first time. It was downloaded more than 28 million times, and it runs the campuses of schools, academies and companies all over the world.

In August 2025 that changed. Bitnami stopped updating its free images: bitnami/moodle froze on 19 August, and bitnamilegacy/moodle, the repository they were moved to, on the 23rd. The sites still start, but they stay for good on the version they had that day.

  1. bitnami/moodle stops receiving updates

  2. bitnamilegacy/moodle does too

  3. Moodle 5.0 runs out of security fixes

  4. Moodle 5.3, the new LTS, in oksigenia/moodle

What staying on a frozen image means

A Docker image is much more than Moodle. It carries an operating system, PHP, Apache and dozens of libraries, and all of them get security fixes every week. In a frozen image, none of them arrive.

A corridor of server racks covered in icicles and, at the far end, a single one lit up in cyan, with particles of light falling on it from the ceiling.
A frozen image still starts. What stops arriving is the fixes.

Then there is Moodle itself. Every branch has an end-of-support date, and 5.0 stopped receiving security fixes on 5 October 2026. A campus on bitnamilegacy/moodle:5.0.2 is exposed on two fronts: the system around it and the application.

The usual answer is a full migration: export the courses, set up a new server, import and hope for the best. There is no need.

Rather not deal with it? We do it all We install your Moodle or migrate the one you have, with a backup first and without stopping the classes. We host it, server included, and keep it up to date.

Let us run your Moodle

The switch: change one line

We have published oksigenia/moodle, an open-source image (GPL-3.0) built to take the place of Bitnami's without changing anything else. It takes the same variables, uses the same volumes (/bitnami/moodle and /bitnami/moodledata) and listens on the same ports, 8080 and 8443. In your docker-compose.yml, this is the change:

   moodle:-    image: bitnamilegacy/moodle:5.0.2+    image: oksigenia/moodle:5.3

Then, as usual:

docker compose pull moodle
docker compose up -d moodle
docker compose logs -f moodle

What the image does when it starts

When the container finds a Bitnami installation, it goes through five steps in order:

  1. It reads your settings from config.php, as Bitnami did, and keeps the original.

  2. It makes a backup of the database and the code, before touching anything.

  3. It swaps the core and keeps your plugins: themes, activities, blocks.

  4. It upgrades the database and adjusts what the new versions ask for.

  5. It starts Apache and cron, on the same ports.

Five stations in a row joined by a beam of cyan light, each with a symbol: a document, some disks, a database, a half-closed ring and a glowing golden ring.
Five steps and none of them destructive: the backup comes before the change.

This is the log of a test migration, from 5.0.2 to 5.3:

[moodle] Giving www-data ownership of the code in /bitnami/moodle
[moodle] Using bitnami/moodle variable names (they keep working; the native names are:
  MOODLE_DATABASE_HOST -> MOODLE_DB_HOST, MOODLE_DATABASE_PORT_NUMBER -> MOODLE_DB_PORT, …
[moodle] oksigenia/moodle: Moodle 5.3.0, role all, bitnami layout
[moodle] Updating Moodle code: 5.0.2 (Build: 20250811) -> 5.3 (Build: 20261005)
[moodle] Using the existing config.php (database settings come from it)
[moodle] Backing up the current code to …/backups/20261005T085146Z/code.tar.gz
[moodle] Backing up the database to …/backups/20261005T085146Z/database.sql.gz
[moodle] Keeping add-on local_oksitest (local/oksitest -> public/local/oksitest)
[moodle] Not carried over, Moodle removed them from core: qtype_random
  block_activity_modules block_section_links tool_moodlenet theme_classic h5plib_v127
[moodle] Upgrading the Moodle database
…
Command line upgrade from 5.0.2 (Build: 20250811) (2025041402) to 5.3 (Build: 20261005)
  (2026100500) completed successfully.
[moodle] Database upgrade finished
[moodle] Moodle is ready at the address in config.php
Test migration on 5 October 2026, from bitnamilegacy/moodle:5.0.2 to oksigenia/moodle:5.3, with a test plugin. Only lines in between have been left out (…) and the longest ones split. On this small site it took 87 seconds from start to “Moodle is ready”, backups included.

In production

  • 92 GBof data
  • 605tables
  • 213 suntil ready
  • 12 of 12third-party plugins kept

A school’s campus moved from 4.5 to 5.2 with the image on the night of 4 to 5 October 2026. The counts before and after matched one by one: users, courses, enrolments, grades, files and 30,668 quiz attempts.

If something does not fit, the image stops before upgrading and explains in the log what is wrong and how to go on. It never leaves the site half done.

Which tag to choose

  • On 4.5.xoksigenia/moodle:4.5The safest step: same branch.
  • On 5.0.xoksigenia/moodle:5.3Or :5.2.
  • On 4.4 or earlieroksigenia/moodle:4.5First 4.5, then 5.x.

5.3 is Moodle's new LTS, the long-term support release. 4.5, the previous LTS, stays published for as long as Moodle maintains it.

Before you switch, five checks

We have migrated real campuses with this image, and these are the points worth checking first:

  • The database. Moodle 5.3 needs MariaDB 11.4 or later, MySQL 8.4 or PostgreSQL 17. Bitnami's MariaDB image is frozen as well, but you can replace it afterwards, as a separate step.
  • The plugins. Check on moodle.org/plugins that each one has a version for the Moodle you are moving to. Some break without the server saying a word: Moodle 5.2 removed the JavaScript module core/modal_factory, and plugins that still use it silently lose their pop-up windows.
  • The Classic theme. Moodle 5.3 removes it from core. If your site uses it, the image stops before upgrading so you can decide; with MOODLE_ALLOW_REMOVED_PLUGINS=yes it carries on.
  • Chat and Survey. Moodle 5.0 took them out of core, and its upgrade deletes those activities. If you have any, the image stops and tells you how to keep them with the version Moodle HQ publishes separately.
  • The site closed. Put it in maintenance mode before the switch:
docker compose exec -u daemon moodle php /opt/bitnami/moodle/admin/cli/maintenance.php --enable

The image keeps it closed after the upgrade, so you can check it before anyone comes back in.

If you are coming from 4.5, the first cron runs take a while: Moodle 5 turns each question bank into an activity of its own and creates courses to hold the shared ones. It is normal and finishes on its own.

Lots of plugins, a custom theme or an old database? We review it first and migrate it with you.

Let’s talk

What the image includes

  • The supported branches: 5.3, 5.2 and 4.5, rebuilt every week to pick up the Debian and PHP fixes.
  • Security you can check: every image is scanned with Trivy before it is published, signed with cosign and shipped with its SBOM, the list of everything it contains.
  • amd64 and arm64, for x86 and ARM servers.
  • Oksigenia Access, our accessibility panel, included and switched off. It turns on with OKSIGENIA_ACCESS=on.

“You can check” means you do not have to take our word for it. With cosign, you verify that the image you pull is the one our repository published:

cosign verify oksigenia/moodle:5.3 \
  --certificate-identity-regexp '^https://github.com/OksigeniaSL/docker-moodle/\.github/workflows/release\.yml@' \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com

The code and the full migration guide are on GitHub.

If you would rather we did it

The image is open source and the guide is written so anyone can follow it. If you would rather not deal with it, we migrate, host and look after Moodle campuses: updates, backups we test by restoring them, and training for your team.

Moodle with OksigeniaSee the image on Docker Hub


The word Moodle and associated Moodle logos are trademarks or registered trademarks of Moodle Pty Ltd or its related affiliates. Oksigenia is not affiliated with Moodle HQ and is not a Moodle Certified Partner.