I have previously shared how to run the Oracle Database 23c Free database on an X86 Mac using PodMan, you can find that blog post here.
But what about Oracle 23ai and the newer M1/M2/M3 ARM based Apple silicon Macs I hear you ask, so here you go.
Preparation
Start by installing the Homebrew package manager, if not already installed.
brew update
% brew --version
Homebrew 4.3.8
And confirm Oracle SQLcL is available.
% sql -v
SQLcl: Release 24.1.0.0 Production Build: 24.1.0.087.0929
Now, install Colima container runtime and Docker if not already installed on your Mac.
brew install colima docker
% colima --version
colima version 0.6.9
% docker --version
Docker version 27.0.2, build 912c1ddf8a
If we now try docker ps to check for processes, we see a docker daemon error message.
% docker ps Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Colima Container Runtime
Start Colima container runtime using the colima start command, we can use colima -help to list all available command line options.
Also, colima defaults can be edited using colima -template or passed on the command line for example.
colima start
--arch x86_64
--vm-type=vz
--vz-rosetta
--mount-type=virtiofs
--memory 8
Below is a list of the Colima container runtime parameters specified or left to default.
- a86_64: Architecture (aarch64, x86_64)
- vz: Virtual machine type (qemu, vz)
- vz-rosetta: Enable Rosetta for amd64 emulation
- disk: Default 60GiB
- virtiofs: Volume Mount Driver – Default virtiofs (for vz), sshfs (for qemu)
- memory: Memory default 2G
- cpu: Default 2
% colima start
--arch x86_64
--vm-type=vz
--vz-rosetta
--mount-type=virtiofs
--memory 8
INFO[0000] starting colima
INFO[0000] runtime: docker
INFO[0000] creating and starting ... context=vm
INFO[0051] provisioning ... context=docker
INFO[0051] starting ... context=docker
INFO[0058] done
We can confirm the Colima Container Runtime configuration with colima staus and colima list, for example.
% colima status
INFO[0000] colima is running using macOS Virtualization.Framework
INFO[0000] arch: x86_64
INFO[0000] runtime: docker
INFO[0000] mountType: virtiofs
INFO[0000] socket: unix:///Users/rekins/.colima/default/docker.sock
% colima list
PROFILE STATUS ARCH CPUS MEMORY DISK RUNTIME ADDRESS
default Running x86_64 4 8GiB 60GiB docker
Before we try and start our Oracle Database 23c Free container, let’s check for Docker processes using docker ps.
We now no longer see the Docker daemon error message.
% docker CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
We can check for existing docker images with docker images, for example.
% docker images REPOSITORY TAG IMAGE ID CREATED SIZE
The docker context show command should return colima, which means Docker runs under Colima and you can therefore use docker commands as usual.
% docker context show colima
Oracle Database 23ai FREE
The Docker run command will automatically attempt to download the Oracle Database 23ai Free image from the Oracle Container Registry.
However it’s also possible to pull the image advance using:
docker pull container-registry.oracle.com/database/free
As we are using the Oracle Database 23ai FREE release there is no need to provide Oracle SSO credentials
Use docker images, docker image ls or docker image list to list available images.
% docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
container-registry.oracle.com/database/free latest 7510f8869b04 2 months ago 8.7GB
We can confirm source and check other details using docker image inspect, for example.
% docker image inspect container-registry.oracle.com/database/free | grep INSTALL_FILE_1
"INSTALL_FILE_1=oracle-database-free-23ai-1.0-1.el8.x86_64.rpm"
To start the Oracle Database 23c Container use docker run, for example
docker run -d \
--name ora23ai \
-p 1522:1521 \
--mount source=oradata,target=/opt/oracle/oradata \
container-registry.oracle.com/database/free
Example output:
% docker run -d \
--name ora23ai \
-p 1522:1521 \
--mount source=oradata,target=/opt/oracle/oradata \
container-registry.oracle.com/database/free
b72c9913201de7466bf214845e5f3e3180a8a86fd3c6fe5b723fe153a7cf010a
We can see the Docker process using docker ps, for example.
% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9f90d0293dca container-registry.oracle.com/database/free "/bin/bash -c $ORACL…" About a minute ago Up About a minute (healthy) 0.0.0.0:1522->1521/tcp, :::1522->1521/tcp ora23ai
Database Logs
We check check progress of the container startup with docker logs, which shows the Oracle database alert.log output.
Wait until the log shows DATABASE IS READY TO USE!
% docker logs ora23ai
Starting Oracle Net Listener.
Oracle Net Listener started.
Starting Oracle Database instance FREE.
Oracle Database instance FREE started.
The Oracle base remains unchanged with value /opt/oracle
#########################
DATABASE IS READY TO USE!
#########################
The following output is now a tail of the alert.log:
2024-07-02T13:00:25.852988+00:00
Completed: Pluggable database FREEPDB1 opened read write
2024-07-02T13:00:27.229582+00:00
Completed: ALTER DATABASE OPEN
2024-07-02T13:00:28.995211+00:00
===========================================================
Dumping current patch information
===========================================================
No patches have been applied
===========================================================
Database Password
The Oracle 23ai FREE database was created with random passwords for SYS, SYSTEM and PDBADMIN, we can reset these using the ./setPassword.sh script provided.
% docker exec -it ora23ai ./setPassword.sh Welcome1
The Oracle base remains unchanged with value /opt/oracle
SQL*Plus: Release 23.0.0.0.0 - Production on Tue Jul 2 13:04:10 2024
Version 23.4.0.24.05
Copyright (c) 1982, 2024, Oracle. All rights reserved.
Connected to:
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.4.0.24.05
SQL>
User altered.
SQL>
User altered.
SQL>
Session altered.
SQL>
User altered.
SQL> Disconnected from Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.4.0.24.05
Database Access
If you have an Oracle client installed on your Mac you can use that to connect to the Oracle 23ai database.
Confirm the container port for the database listener using docker port, for example.
% docker port ora23ai
1521/tcp -> 0.0.0.0:1522
1521/tcp -> [::]:1522
Using sqlcl and the new password, the mapped listener port and database name we can connect thus:
% sql system/Welcome1@//localhost:1522/FREE
SQLcl: Release 24.1 Production on Tue Jul 02 14:06:38 2024
Copyright (c) 1982, 2024, Oracle. All rights reserved.
Last Successful login time: Tue Jul 02 2024 14:06:44 +01:00
Connected to:
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.4.0.24.05
SQL> select INSTANCE_NAME, HOST_NAME, VERSION_FULL from v$instance;
INSTANCE_NAME HOST_NAME VERSION_FULL
________________ _______________ _______________
FREE b72c9913201d 23.4.0.24.05
The FREE database comes with a single Pluggable Database (PDB) called FREEPDB1, we can connect to the PDB using the same method.
% sql system/Welcome1@//localhost:1522/FREEPDB1
SQLcl: Release 24.1 Production on Tue Jul 02 14:10:06 2024
Copyright (c) 1982, 2024, Oracle. All rights reserved.
Last Successful login time: Tue Jul 02 2024 14:10:13 +01:00
Connected to:
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.4.0.24.05
SQL> show con_name;
CON_NAME
------------------------------
FREEPDB1
Alternatively, we can access the 23ai database by executing sqlplus within the container, for example:
% docker exec -it ora23ai sqlplus / as sysdba
SQL*Plus: Release 23.0.0.0.0 - Production on Tue Jul 2 13:11:39 2024
Version 23.4.0.24.05
Copyright (c) 1982, 2024, Oracle. All rights reserved.
Connected to:
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.4.0.24.05
SQL> select banner_full from v$version;
BANNER_FULL
--------------------------------------------------------------------------------
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.4.0.24.05
Summary
In this blog post I have shown that it is possible to run the Oracle Database 23ai Free on the newer M1/M2/M3 MacBooks.
There are definitely some performance challenges, but if you can’t wait till Oracle ships a native Oracle Database 23ai ARM version to start your Oracle 23ai learning journey, it may be just what you need.

You can set the password by using the parameter ORACLE_PWD=Welcome1 when executing the docker run command. Saves one step.
Thanks Andy
nice blog, thanks you wroked seamless on my M1 imac
Thanks Saran