An all-in-one Docker image for Oracle APEX development. This container bundles Oracle Database XE 21c, Oracle REST Data Services (ORDS), and Oracle APEX into a single, easy-to-deploy image based on Oracle Linux.
latest slim builds)Download the following files and place them in the build/ directory:
git clone https://github.com/yourusername/oracle-apex-docker.git
cd oracle-apex-docker
docker compose up -d
docker compose logs -f oracle-apex
docker run -d \
--name oracle-apex \
-p 1521:1521 \
-p 8080:8080 \
-e ORACLE_PWD="Oracle123456" \
-e APEX_ADMIN_EMAIL="admin@example.com" \
-e ORDS_PWD="Oracle123456" \
-v apex_data:/opt/oracle/oradata \
codjix/oracle-apex:latest
The latest image downloads all Oracle software automatically during the Docker build process:
codjix/oracle-apex:latestThe slim image requires you to manually download Oracle software and place it in the build/ directory:
codjix/oracle-apex:slimThe project includes a convenient build script:
./build.sh latest
build/ directory (see Prerequisites)./build.sh slim
./build.sh --help # Show help
./build.sh --version # Show version
# Latest
docker buildx build -t codjix/oracle-apex:latest -f ./Dockerfile .
# Slim
docker buildx build -t codjix/oracle-apex:slim -f ./slim.Dockerfile .
Configure the container using environment variables in compose.yaml or via -e flags with docker run.
| Variable | Description | Default | Required |
|---|---|---|---|
ORACLE_PWD |
SYS/SYSTEM database password | Oracle123456 |
Yes |
APEX_ADMIN_EMAIL |
APEX admin email address | admin@example.com |
Yes |
ORDS_PWD |
ORDS and APEX user passwords | Oracle123456 |
Yes |
ORACLE_SID |
Oracle System Identifier | XE |
No |
ORACLE_PDB |
Pluggable Database name | XEPDB1 |
No |
| Port | Service | Description |
|---|---|---|
1521 |
Oracle Database | SQL*Net listener for database connections |
8080 |
ORDS/APEX | Web interface for APEX and REST APIs |
| Path | Description |
|---|---|
/opt/oracle/oradata |
Database files (persistent storage) |
/build |
Oracle software files (slim image only) |
docker compose up -d
docker compose down
docker compose logs -f oracle-apex
docker compose restart oracle-apex
From inside the container:
docker compose exec oracle-apex sqlplus sys/Oracle123456@localhost:1521/XE as sysdba
From your host (requires Oracle Client):
sqlplus sys/Oracle123456@localhost:1521/XE as sysdba
sqlplus sys/Oracle123456@localhost:1521/XEPDB1 as sysdba
Once the container is running, access Oracle APEX through your web browser:
/apex_adminINTERNALADMINORACLE_PWD (default: Oracle123456)ADMINOracle123456 (or your ORACLE_PWD value)admin@example.com (or your APEX_ADMIN_EMAIL value)Oracle123456 (or your ORACLE_PWD value)localhost:1521/XE (CDB) or localhost:1521/XEPDB1 (PDB)ORDS_PWDORDS_PWDORDS_PWD⚠️ Security Warning: Change default passwords in production environments!
Database files are stored in a Docker volume mounted at /opt/oracle/oradata. This ensures:
To start fresh (⚠️ deletes all data):
docker compose down -v
docker compose up -d
Check the logs:
docker compose logs oracle-apex
Common causes:
The first container start takes 10-20 minutes as it:
Subsequent starts are much faster (~30 seconds).
If using the slim image, ensure:
ls -lh build/
# Should show:
# apex.zip
# database.rpm
# ords.zip
And in compose.yaml, uncomment:
volumes:
- ./build:/build
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
Ibrahim Megahed
This Docker image is for development and testing purposes. Oracle Database XE comes with its own license terms. Please review Oracle’s licensing before use.
For production use, consider Oracle’s official container images or ensure compliance with Oracle’s licensing requirements.