01 / 13DevOpsBeginner3 min read

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, macOS or Linux. APEX installs itself.

By Mohamed Harby · Tested on Oracle AI Database 26ai Free, APEX 26.2, ORDS 26.3 · Last verified

On this page
  1. Prerequisites
  2. Get access to the Oracle images
  3. Get the template and set passwords
  4. Download APEX 26.2
  5. Start the stack
  6. Set your APEX admin password
  7. Verify and first sign-in
  8. Daily lifecycle
  9. Upgrading APEX later
  10. Check your understanding

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.

PowerShell
# 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
Terminal · macOS
# Install Docker Desktop for Mac (https://www.docker.com/products/docker-desktop/) and start it once
# Git comes with the Xcode command-line tools:
xcode-select --install
bash · Linux
# Install Docker Engine (Ubuntu / Oracle Linux)
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER   # log out and back in afterwards

Check Docker works before you continue:

PowerShell
docker run hello-world
Terminal · macOS
docker run hello-world
bash · Linux
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:

PowerShell
docker login container-registry.oracle.com
Terminal · macOS
docker login container-registry.oracle.com
bash · Linux
docker login container-registry.oracle.com

You should see Login Succeeded.

Get the template and set passwords

PowerShell
cd $HOME
git clone https://github.com/Mohamedhrby/oracle-26ai-apex-docker.git
cd oracle-26ai-apex-docker
copy .env.example .env
notepad .env
Terminal · macOS
cd ~
git clone https://github.com/Mohamedhrby/oracle-26ai-apex-docker.git
cd oracle-26ai-apex-docker
cp .env.example .env
nano .env
bash · Linux
cd ~
git clone https://github.com/Mohamedhrby/oracle-26ai-apex-docker.git
cd oracle-26ai-apex-docker
cp .env.example .env
nano .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 \r. 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:

PowerShell
.\scripts\get-apex.ps1
Terminal · macOS
./scripts/get-apex.sh
bash · Linux
./scripts/get-apex.sh

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

PowerShell
docker compose up -d
docker compose logs -f ords
Terminal · macOS
docker compose up -d
docker compose logs -f ords
bash · Linux
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:

PowerShell
.\scripts\set-admin-password.ps1
Terminal · macOS
./scripts/set-admin-password.sh
bash · Linux
./scripts/set-admin-password.sh

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

PowerShell
docker compose ps
Terminal · macOS
docker compose ps
bash · Linux
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:

PowerShell
sql system@//localhost:1521/FREEPDB1
Terminal · macOS
sql system@//localhost:1521/FREEPDB1
bash · Linux
sql system@//localhost:1521/FREEPDB1

Daily lifecycle

PowerShell
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
Terminal · macOS
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
bash · Linux
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.

Get the Oracle + AI digest

One email when a new tested guide, template or APEX release note lands — English or Arabic. No spam; unsubscribe anytime.

Need this delivered? Request a quote