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.
- Features
- Prerequisites
- Quick Start
- Image Types
- Building the Image
- Configuration
- Usage
- Accessing APEX
- Default Credentials
- Data Persistence
- Troubleshooting
- License
- All-in-One Solution: Oracle Database XE 21c, ORDS, and APEX in a single container
- Two Build Options:
- Latest: Downloads Oracle software automatically during build
- Slim: Uses locally provided Oracle software (smaller build context)
- Persistent Storage: Data persists across container restarts using Docker volumes
- Easy Configuration: Customize credentials and settings via environment variables
- Production-Ready: Includes proper initialization, health checks, and automatic setup
- Modern APEX: Comes with Oracle APEX 24.2
- Docker Engine 20.10+ or Docker Desktop
- At least 4GB of RAM allocated to Docker
- At least 15GB of free disk space
- Oracle Software (for
latestslim builds)
Download the following files and place them in the build/ directory:
- Oracle Database XE 21c: oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm
- Oracle ORDS 25.3.1: ords-25.3.1.289.1312.zip
- Oracle APEX 24.2: apex_24.2.zip
- Clone the repository:
git clone https://github.com/yourusername/oracle-apex-docker.git
cd oracle-apex-docker- Start the container:
docker compose up -d- Wait for initialization (first start takes 5-10 minutes):
docker compose logs -f oracle-apex- Access APEX at http://localhost:8080/ords
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:latestThe latest image downloads all Oracle software automatically during the Docker build process:
- Pros: Simpler build process, no manual downloads
- Cons: Larger build context, requires internet during build
- Image Tag:
codjix/oracle-apex:latest
The slim image requires you to manually download Oracle software and place it in the build/ directory:
- Pros: Faster builds after initial setup, works offline
- Cons: Manual download step required, needs volume mount during setup
- Image Tag:
codjix/oracle-apex:slim
The project includes a convenient build script:
./build.sh latest- Download required files to
build/directory (see Prerequisites) - Build the image:
./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 -ddocker compose downdocker compose logs -f oracle-apexdocker compose restart oracle-apexFrom inside the container:
docker compose exec oracle-apex sqlplus sys/Oracle123456@localhost:1521/XE as sysdbaFrom your host (requires Oracle Client):
sqlplus sys/Oracle123456@localhost:1521/XE as sysdbasqlplus sys/Oracle123456@localhost:1521/XEPDB1 as sysdbaOnce the container is running, access Oracle APEX through your web browser:
- APEX Development: http://localhost:8080/ords
- APEX Administration: http://localhost:8080/ords/apex_admin
- Navigate to http://localhost:8080/ords
- Click on "Administration Services" or go to
/apex_admin - Login with:
- Workspace:
INTERNAL - Username:
ADMIN - Password: Value of
ORACLE_PWD(default:Oracle123456)
- Workspace:
- Username:
ADMIN - Password:
Oracle123456(or yourORACLE_PWDvalue) - Email:
admin@example.com(or yourAPEX_ADMIN_EMAILvalue)
- SYS/SYSTEM Password:
Oracle123456(or yourORACLE_PWDvalue) - Connection String:
localhost:1521/XE(CDB) orlocalhost:1521/XEPDB1(PDB)
- APEX_PUBLIC_USER: Password set to
ORDS_PWD - APEX_REST_PUBLIC_USER: Password set to
ORDS_PWD - APEX_LISTENER: Password set to
ORDS_PWD
β οΈ Security Warning: Change default passwords in production environments!
Database files are stored in a Docker volume mounted at /opt/oracle/oradata. This ensures:
- Data persists across container restarts
- Data survives container removal
- Easy backup and restore capabilities
To start fresh (
docker compose down -v
docker compose up -dCheck the logs:
docker compose logs oracle-apexCommon causes:
- Insufficient memory (increase Docker memory to 8GB+)
- Insufficient disk space
- Port conflicts (1521 or 8080 already in use)
The first container start takes 10-20 minutes as it:
- Installs Oracle Database XE
- Configures the database
- Installs Oracle APEX
- Configures ORDS
- Creates admin user
Subsequent starts are much faster (~30 seconds).
If using the slim image, ensure:
ls -lh build/
# Should show:
# apex.zip
# database.rpm
# ords.zipAnd in compose.yaml, uncomment:
volumes:
- ./build:/buildContributions 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
- Email: codjix@gmail.com
- GitHub: @codjix
- Oracle Corporation for Oracle Database XE, ORDS, and APEX
- The Oracle Linux team for the base image
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.