Apple released its own container runtime tool, called container, which creates and runs Linux containers as lightweight virtual machines on a Mac (using Kata Containers). As one would expect, Oracle (AI) Database Free container images run just as fine under container as under Podman or Docker.
Apple container is a GitHub project (https://github.com/apple/container) that you can download straight from there or install via Homebrew (brew install container). The look’n’feel is similar to Podman, although a few command verbs differ. To get started, one has to bring up the API service via container system start:
gvenzl@gvenzl-mac ~ % container system start
Launching container-apiserver...
Testing access to container-apiserver...
Verifying machine API server is running...
gvenzl@gvenzl-mac ~ %
By default, container starts containers with a maximum of 1 GB of RAM, which is not sufficient for Oracle AI Database Free (unless you have reduced your SGA_TARGET). You can either overwrite that default via the run command’s -m | --memory parameter, or you can set a new RAM default for new containers. Realistically speaking, if you are only going to run Oracle Free and a few supporting containers on your Mac, you may just want to increase the default RAM so that you don’t have to always pass on the -m option.
If you wanted to change the default container RAM, you can do so by creating a new ~/.config/container/config.toml file. Be careful not to confuse it with ~/.config/containers/, which Podman is using. You can verify the current and new configuration with container system property list – an API server restart is required to pick up the new config:
Out of the box config
gvenzl@gvenzl-mac ~ % container system property list
[build]
cpus = 2
image = "ghcr.io/apple/container-builder-shim/builder:0.13.1"
memory = "2048mb"
rosetta = true
[container]
cpus = 4
memory = "1gb"
[dns]
[kernel]
binaryPath = "opt/kata/share/kata-containers/vmlinux-6.18.35-197-debug"
digest = "sha256:8736c054d9223974735394f822000823baef509e1c33405ec798240fa9b6e4b5"
url = "https://github.com/kata-containers/kata-containers/releases/download/3.32.0/kata-static-3.32.0-arm64.tar.zst"
[machine]
cpus = 5
homeMount = "rw"
memory = "18gb"
virtualization = false
[network]
[registry]
domain = "docker.io"
[vminit]
image = "ghcr.io/apple/containerization/vminit:0.42.0"
Setting new container memory default to 2G + 256MB
gvenzl@gvenzl-mac ~ % mkdir -p ~/.config/container
gvenzl@gvenzl-mac ~ % echo '[container]
quote> memory="2304m"' > ~/.config/container/config.toml
gvenzl@gvenzl-mac ~ % cat ~/.config/container/config.toml
[container]
memory="2304m"
Restart API service and double check value
gvenzl@gvenzl-mac ~ % container system stop
2026-09-08T14:26:37-0700 info com.apple.container.cli: [ContainerCommands] checking if APIServer is alive
2026-09-08T14:26:37-0700 info com.apple.container.cli: stopTimeoutSeconds=5 [ContainerCommands] stopping containers
2026-09-08T14:26:37-0700 info com.apple.container.cli: [ContainerCommands] waiting for containers to exit
2026-09-08T14:26:37-0700 info com.apple.container.cli: label=gui/501/com.apple.container.apiserver [ContainerCommands] stopping service
2026-09-08T14:26:37-0700 info com.apple.container.cli: label=gui/501/com.apple.container.container-network-vmnet.default [ContainerCommands] stopping service
2026-09-08T14:26:37-0700 info com.apple.container.cli: label=gui/501/com.apple.container.container-core-images [ContainerCommands] stopping service
2026-09-08T14:26:37-0700 info com.apple.container.cli: label=gui/501/com.apple.container.machine-apiserver [ContainerCommands] stopping service
gvenzl@gvenzl-mac ~ % container system start
Launching container-apiserver...
Testing access to container-apiserver...
Verifying machine API server is running...
gvenzl@gvenzl-mac ~ % container system property list
[build]
cpus = 2
image = "ghcr.io/apple/container-builder-shim/builder:0.13.1"
memory = "2048mb"
rosetta = true
[container]
cpus = 4
memory = "2304mb"
[dns]
[kernel]
binaryPath = "opt/kata/share/kata-containers/vmlinux-6.18.35-197-debug"
digest = "sha256:8736c054d9223974735394f822000823baef509e1c33405ec798240fa9b6e4b5"
url = "https://github.com/kata-containers/kata-containers/releases/download/3.32.0/kata-static-3.32.0-arm64.tar.zst"
[machine]
cpus = 5
homeMount = "rw"
memory = "18gb"
virtualization = false
[network]
[registry]
domain = "docker.io"
[vminit]
image = "ghcr.io/apple/containerization/vminit:0.42.0"
Once done, Oracle AI Database Free is only a container run away:
Oracle AI Database Free with Apple container
gvenzl@gvenzl-mac ~ % container run --name oracle-free -p 1521:1521 -e ORACLE_PASSWORD=LetsHaveFun1 gvenzl/oracle-free:slim
CONTAINER: starting up...
CONTAINER: first database startup, initializing...
CONTAINER: uncompressing database data files, please wait...
CONTAINER: done uncompressing database data files, duration: 3 seconds.
CONTAINER: starting up Oracle Database...
LSNRCTL for Linux: Version 23.26.3.0.0 - Production on 08-SEP-2026 21:30:21
Copyright (c) 1991, 2026, Oracle. All rights reserved.
Starting /opt/oracle/product/26ai/dbhomeFree/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 23.26.3.0.0 - Production
System parameter file is /opt/oracle/product/26ai/dbhomeFree/network/admin/listener.ora
Log messages written to /opt/oracle/diag/tnslsnr/oracle-free/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_FREE)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle-free)(PORT=1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_FREE)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 23.26.3.0.0 - Production
Start Date 08-SEP-2026 21:30:22
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Default Service FREE
Listener Parameter File /opt/oracle/product/26ai/dbhomeFree/network/admin/listener.ora
Listener Log File /opt/oracle/diag/tnslsnr/oracle-free/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_FREE)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle-free)(PORT=1521)))
The listener supports no services
The command completed successfully
ORACLE instance started.
Total System Global Area 1603392144 bytes
Fixed Size 5026448 bytes
Variable Size 603979776 bytes
Database Buffers 989855744 bytes
Redo Buffers 4530176 bytes
Database mounted.
Database opened.
ORACLE DATABASE VERSION
--------------------------------------------------------------------------------
Oracle AI Database 26ai Free Release 23.26.3.0.0 - Develop, Learn, and Run for F
ree
Version 23.26.3.0.0
CONTAINER: Resetting SYS and SYSTEM passwords.
User altered.
User altered.
#########################
DATABASE IS READY TO USE!
#########################
Note: I noticed that [Ctrl]+ doesn’t work with container. When you press that key combination, you get a ^Cfailed to send signal: ["error": invalidArgument: "missing signal in xpc message", "signal": 2] error. This apparently is known bug #1997 that is yet to be fixed.
