32 lines
1.8 KiB
Docker
32 lines
1.8 KiB
Docker
# Custom Oracle AI Database image for Railway (Option B — self-host).
|
|
#
|
|
# It is the freely-pullable Oracle Database Free image with the `cookbook` user
|
|
# baked in, so the database comes up ready with no manual setup step.
|
|
#
|
|
# Build + push to a PRIVATE registry ONLY — re-publishing Oracle's image
|
|
# publicly violates the Oracle license. See build-and-push.sh.
|
|
#
|
|
# :latest-lite is the smaller Free variant (faster pulls / less disk on Railway)
|
|
# and still includes AI Vector Search. Switch to :latest if you hit a missing
|
|
# feature.
|
|
FROM container-registry.oracle.com/database/free:latest-lite
|
|
|
|
# Admin (SYS / SYSTEM / PDBADMIN) password — matches the local docker-compose default.
|
|
ENV ORACLE_PWD=cookbook_admin_pw
|
|
|
|
# Startup scripts (run on every container start, alphabetical order). We use the
|
|
# *startup* hook rather than the *setup* hook: the Free image does NOT reliably
|
|
# execute setup/ scripts (see the note in db/init/01-create-user.sql), and our SQL
|
|
# is idempotent, so running it each boot is safe and robust. Baking it in (vs a
|
|
# volume mount) also avoids the mount-timing race the local compose hit.
|
|
#
|
|
# 00 registers FREEPDB1 with the TCP listener on the container's IPv4 address so the
|
|
# agent can reach it over Railway's dual-stack private network (Railway fix — see
|
|
# the file header). A shell script (not SQL) because it must read the IPv4 from
|
|
# `hostname -I`; UTL_INADDR only yields the IPv6 address. No exec bit / chmod: the
|
|
# image runs as a non-root user (chmod during build is denied), and the startup
|
|
# hook *sources* non-executable .sh files — the script is written to be source-safe.
|
|
# 01 creates the `cookbook` application user (idempotent).
|
|
COPY init/00-register-listener.sh /opt/oracle/scripts/startup/00-register-listener.sh
|
|
COPY init/01-create-user.sql /opt/oracle/scripts/startup/01-create-user.sql
|