Skip to content

Running Mendix 8 in Docker

Hardy Jonck edited this page Jun 23, 2026 · 1 revision

Running Mendix 8 in Docker

Mendix 8.18 is the final Mendix 8 LTS line. It is out of mainstream support, but plenty of organisations still run production MX8 apps and need to stand one up locally — for testing, debugging, CI, or a migration spike — without Studio Pro. The mendix-8 runtime crate does exactly that: bind-mount your unzipped MDA, get a working runtime, reload in seconds. The good news for MX8 specifically: the final patch (8.18.35.97) is still on the public Mendix CDN, so it builds with no special steps.

TL;DR

cd crates/mendix-8
docker build --platform linux/amd64 --build-arg MENDIX_VERSION=8.18.35.97 \
  -t ontologylabs/mendix-runtime:8 .
unzip your-mx8-app.mda -d ./tests/mda
docker compose -f tests/docker-compose.smoke.yml up   # → http://localhost:8080

What you get

  • Java 11 + the Mendix 8.18 runtime, pulled from cdn.mendix.com at build time (never committed). Base image eclipse-temurin:11-jre-jammy. (MX 8.18 is certified on Java 8 and 11; Java 11 is used here and runs Java-8 bytecode. Rebuild on eclipse-temurin:8-jre-jammy via --build-arg for a Java-8-pinned app.)
  • Your model bind-mounted, not baked — docker compose restart to reload, zero dangling images.
  • PostgreSQL-backed, driven through the m2ee admin protocol — the same start.sh boot path as Mendix 7/9/10/11.
  • Model-default constants auto-supplied from the MDA's metadata.json (MX8 does not auto-apply them otherwise).

Build & run

cd crates/mendix-8
docker build --platform linux/amd64 --build-arg MENDIX_VERSION=8.18.35.97 \
  -t ontologylabs/mendix-runtime:8.18.35.97 -t ontologylabs/mendix-runtime:8 .

docker run -d --name my-mx8 -p 8080:8080 -p 8090:8090 \
  -v /path/to/unzipped/mda:/opt/mendix/app:ro \
  -v my-mx8-data:/opt/mendix/data \
  -e DATABASE_ENDPOINT="postgres://mendix:mendix@db:5432/mendix" \
  -e ADMIN_PASSWORD="a-strong-password" \
  -e DEVELOPMENT_MODE="true" \
  ontologylabs/mendix-runtime:8.18.35.97

The MX8-specific things

  • It's on the CDN. Unlike what you might expect for an out-of-support major, 8.18.35.97 (runtime + mxbuild) returns HTTP 200 from cdn.mendix.com. Older MX8 patches are not all hosted (e.g. 8.18.21.4259 → 404) — for those, obtain the tarball via the Mendix portal and point RUNTIME_CDN_BASE at a local copy. See PORTAL-DOWNLOAD.md (includes agent download-instructions).
  • Java 11, not 8 (by default). MX 8.18 supports both; the crate defaults to 11. Override the base image for a strictly-Java-8 app.
  • Boot path is identical to MX 7/9/10/11 — runtimelauncher.jar + m2ee admin protocol — so the same start.sh drives it.

Compiling an MX8 app

A matching build crate (crates/mendix-8/build) compiles an .mpr.mda with mxbuild in Docker — no Studio Pro. See Building Mendix apps in Docker.

Verification status

The crate's recipe and its CDN source are verified (HTTP 200). A full boot-smoke against a real MX8 app (HTTP 200, as done for MX7/9/10/11) is still pending — provenance.yaml records smoke_verified: pending. Run an MX8 app on it? A fixture-row PR is welcome.

Provenance & licence

The crate scaffolding is Apache-2.0. The Mendix runtime is curled from the official CDN at build time and is never committed — it remains Mendix's IP under Mendix's terms of use.


Part of mendix-runtime-crates — the runtime layer of the mxto Mendix toolchain. The same pattern works for Mendix 7, 9, 10, and 11 — see the README.

Clone this wiki locally