DevOps

Install Oracle 26ai + APEX 26.2 with Docker

A clean, tested local stack — Oracle AI Database 26ai Free, ORDS 26.3 and APEX 26.2 in official containers — on Windows or Linux. APEX installs itself.

Beginner⏱ 3 min readUpdated: 2026-10-11

Run the full Oracle stack — Oracle AI Database 26ai Free, ORDS 26.3 and APEX 26.2 — locally in Docker. It's the foundation every other guide builds on.

This guide uses the free companion template, oracle-26ai-apex-docker. It pins the image versions, verifies the APEX download against Oracle's published checksum, and lets the official ORDS container install APEX for you.

Pick your OS — every command block on this page switches with it:

Prerequisites

You need Docker, Git, about 15 GB of free disk and at least 4 GB of RAM for Docker. On Windows, Docker Desktop runs on WSL2.

# Install WSL2 (admin PowerShell; reboot if prompted), then Docker Desktop and Git
wsl --install
winget install -e --id Docker.DockerDesktop
winget install -e --id Git.Git

Check Docker works before you continue:

docker run hello-world

Get access to the Oracle images

Create a free account at container-registry.oracle.com. Open Database → free and Database → ords and accept the licence on each page once. Then log Docker in:

docker login container-registry.oracle.com

You should see Login Succeeded.

Get the template and set passwords

cd $HOME
git clone https://github.com/Mohamedhrby/oracle-26ai-apex-docker.git
cd oracle-26ai-apex-docker
copy .env.example .env
notepad .env

Set four passwords in .env: ORACLE_PWD (SYS/SYSTEM), ORDS_PUBLIC_PWD and APEX_PUBLIC_PWD (the accounts ORDS connects with) and APEX_ADMIN_PWD (your APEX admin sign-in). If ports 1521 or 8080 are already in use, change DB_PORT or ORDS_PORT.

⚠ Keep .env on LF line endings

The template ships .env.example with LF endings. If your editor converts the file to Windows CRLF, a password can pick up an invisible trailing . In VS Code, check the LF/CRLF indicator in the status bar before saving.

Download APEX 26.2

Docker doesn't ship APEX. This script downloads it from oracle.com, checks it against the SHA256 that Oracle publishes, and unzips it to ./apex:

.\scripts\get-apex.ps1

The full download is about 340 MB and includes every language, which you need for a translated APEX Builder (Arabic, for example). For English only, set APEX_EDITION=en in .env before running it.

Start the stack

docker compose up -d
docker compose logs -f ords

The first start downloads about 10 GB of images, starts the database, then lets ORDS install itself and APEX into FREEPDB1. Budget 15-25 minutes after the download finishes. Press Run to see the real log of a healthy first start:

docker compose logs -f ords

When you see Starting the Oracle REST Data Services instance, press Ctrl+C to stop following the log; the stack keeps running.

Set your APEX admin password

The silent installer that the ORDS container runs gives the APEX instance administrator a fixed password that is printed in Oracle's own image script — so it's effectively public. Replace it with your APEX_ADMIN_PWD:

.\scripts\set-admin-password.ps1

💡 Why this matters

Anyone who can reach port 8080 could otherwise sign in as the APEX instance administrator. Run this before you share the machine or expose the port.

Verify and first sign-in

docker compose ps

Both containers should show healthy. Open http://localhost:8080/ords/apex and sign in to workspace INTERNAL as ADMIN with your APEX_ADMIN_PWD. You'll land on *Welcome to Oracle APEX*. Choose Create Workspace to make your first workspace and schema.

ℹ Connection cheat sheet

Host localhost · Port 1521 · Service FREEPDB1 · Admin SYSTEM · APEX http://localhost:8080/ords/apex · SQL Developer Web http://localhost:8080/ords/sql-developer

Connect from SQLcl or any SQL client:

sql system@//localhost:1521/FREEPDB1

Daily lifecycle

docker compose stop      # pause (keeps data)
docker compose start     # resume
docker compose down      # remove containers (volumes and data persist)
docker compose down -v   # full reset: DELETES the database

Try a couple of safe commands yourself:

Try: docker compose ps · docker compose stop · docker compose start
$

Upgrading APEX later

When Oracle ships the next APEX release, update the version and checksums at the top of scripts/get-apex.*, run it again, then docker compose restart ords. ORDS sees the newer release in ./apex and upgrades APEX in place. Check that release's required ORDS version first and bump the ORDS image tag if needed.

⚠ This stack is for development

SQL Developer Web is on and ORDS speaks plain HTTP. Don't expose it to the internet as-is. For production, put ORDS behind a TLS proxy with the developer tools switched off; the Production ORDS config pack does exactly that.

Check your understanding

Check your understanding

0% · 0/3

What URL serves APEX after this install?

Which ORDS version does APEX 26.2 require?

Why run set-admin-password after the first start?

That's a complete, verified local Oracle + APEX 26.2 environment. Next: build your first app by chatting with an AI agent.

Need this delivered?

Request a quote