Skip to content

Commit 3b41b2e

Browse files
committed
Repurpose into the Oracle UMT Developer Hub (converged-database-lab as first lab)
Turns this blank placeholder repo into the Oracle UMT Developer Hub: a hub landing README, labs/converged-database-lab as the first runnable lab with its validation CI relocated to the hub root, and the Oracle DevRel governance suite preserved.
1 parent 0a001a0 commit 3b41b2e

29 files changed

Lines changed: 1439 additions & 18 deletions
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
name: converged-database-lab
2+
on:
3+
push:
4+
branches: [main]
5+
paths:
6+
- 'labs/converged-database-lab/**'
7+
- '.github/workflows/converged-database-lab.yml'
8+
pull_request:
9+
paths:
10+
- 'labs/converged-database-lab/**'
11+
- '.github/workflows/converged-database-lab.yml'
12+
schedule:
13+
- cron: '17 6 * * *' # nightly: substantive freshness, not cosmetic
14+
workflow_dispatch:
15+
16+
jobs:
17+
validate:
18+
runs-on: ubuntu-latest
19+
timeout-minutes: 45
20+
defaults:
21+
run:
22+
working-directory: labs/converged-database-lab
23+
steps:
24+
- uses: actions/checkout@v4
25+
26+
- name: Free disk space
27+
run: sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc /opt/hostedtoolcache/CodeQL
28+
29+
- name: Boot lab (build + init)
30+
run: |
31+
docker compose up -d --build oracle
32+
# Health check polls every 15s with up to 40 retries + 120s start_period.
33+
# We wait up to 90 × 15s = 22.5 min, which covers the cold-start image pull
34+
# and DB initialization in CI. Break early once healthy; fail fast on unhealthy.
35+
for i in $(seq 1 90); do
36+
status=$(docker inspect -f '{{.State.Health.Status}}' lab-oracle 2>/dev/null || echo "starting")
37+
[ "$status" = "healthy" ] && echo "Healthy after $((i * 15))s" && break
38+
if [ "$status" = "unhealthy" ]; then
39+
echo "Container is unhealthy — printing last 100 log lines and aborting"
40+
docker logs lab-oracle --tail 100
41+
exit 1
42+
fi
43+
echo "[$i/90] status=$status — sleeping 15s"
44+
sleep 15
45+
done
46+
final=$(docker inspect -f '{{.State.Health.Status}}' lab-oracle)
47+
if [ "$final" != "healthy" ]; then
48+
echo "Container never became healthy (status=$final)"
49+
docker logs lab-oracle --tail 100
50+
exit 1
51+
fi
52+
53+
- name: Verify domain initialized
54+
# Use a heredoc piped to sqlplus to avoid all shell-quoting issues.
55+
# The grep checks for 'customers=200' in the output.
56+
run: |
57+
docker exec lab-oracle bash -c "sqlplus -s / as sysdba <<'ENDSQL'
58+
ALTER SESSION SET CONTAINER=FREEPDB1;
59+
SELECT 'customers='||COUNT(*) FROM lab_user.customers;
60+
ENDSQL
61+
" | grep -q 'customers=200'
62+
63+
- uses: actions/setup-python@v5
64+
with: { python-version: '3.11' }
65+
66+
- name: Run validator
67+
run: |
68+
pip install -r validator/requirements.txt
69+
python validator/run.py

README.md

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,58 @@
1-
# terraform-oci-ocloud-asset-database
1+
# Oracle UMT Developer Hub
22

3-
[![License: UPL](https://img.shields.io/badge/license-UPL-green)](https://img.shields.io/badge/license-UPL-green) [![Quality gate](https://sonarcloud.io/api/project_badges/quality_gate?project=oracle-devrel_terraform-oci-ocloud-asset-database)](https://sonarcloud.io/dashboard?id=oracle-devrel_terraform-oci-ocloud-asset-database)
3+
[![License: UPL](https://img.shields.io/badge/license-UPL-green)](https://oss.oracle.com/licenses/upl/)
44

5-
## THIS IS A NEW, BLANK REPO THAT IS NOT READY FOR USE YET. PLEASE CHECK BACK SOON!
5+
Technical resources for developers learning **Unified Model Theory (UMT)** and converged data modeling on **Oracle AI Database 26ai***model the domain once, project the access for every consumer.*
66

7-
## Introduction
8-
MISSING
7+
This hub collects hands-on, **runnable** labs and companion material for the UMT / converged-database content series. Nothing here is slideware: every lab boots a real Oracle AI Database 26ai container and proves its claims by executing them — document, relational, graph, vector, spatial, and full-text in **one engine, one transaction, one optimizer.**
8+
9+
> **One truth. Many shapes. Every claim runs.**
10+
11+
## What You'll Find
12+
13+
This repository is organized so that each runnable asset lives in its own folder under a category. More labs and companion material will be added as the series grows.
14+
15+
### 🧪 Labs (`/labs`)
16+
17+
Self-contained, runnable labs that validate converged-model claims against a live Oracle AI Database 26ai. Each lab includes a Docker environment, a validator, and its own README and quickstart, and runs itself nightly in CI so the proofs stay honest.
18+
19+
| Name | Description | Link |
20+
| --- | --- | --- |
21+
| converged-database-lab | Runnable proofs for the converged-database article series — JSON Relational Duality, single-table vs. converged modeling, graph, vector, spatial, and full-text claims, each executing against a free Oracle AI Database 26ai container. | [![View Lab](https://img.shields.io/badge/View%20Lab-blue?style=flat-square)](./labs/converged-database-lab) |
22+
23+
*More labs coming as the content series expands.*
924

1025
## Getting Started
11-
MISSING
1226

13-
### Prerequisites
14-
MISSING
27+
Each lab is self-contained. To run the converged-database lab:
1528

16-
## Notes/Issues
17-
MISSING
29+
```bash
30+
cd labs/converged-database-lab
31+
docker compose up -d --build oracle # ~2 GB image; first boot seeds the domain (~2 min)
32+
pip install -r validator/requirements.txt
33+
python validator/run.py # runs every module, prints ASSERT results
34+
```
1835

19-
## URLs
20-
* Nothing at this time
36+
See the lab's own [README](./labs/converged-database-lab) for details, troubleshooting, and the module map.
37+
38+
## About Unified Model Theory
39+
40+
Relational and document are not competing paradigms — they are **orthogonal projections of the same truth.** UMT models the domain once as a normalized **canonical form**, then projects whatever **shape** each consumer needs — a document, a graph, a vector, a relational result — from that single source, with no copies to drift out of sync. On a converged engine, the access pattern still drives the model; you just stop walking through one-way doors to serve it.
2141

2242
## Contributing
23-
This project is open source. Please submit your contributions by forking this repository and submitting a pull request! Oracle appreciates any contributions that are made by the open source community.
43+
44+
This project welcomes contributions from the community. Before submitting a pull request, please [review our contribution guide](./CONTRIBUTING.md).
45+
46+
## Security
47+
48+
Please consult the [security guide](./SECURITY.md) for our responsible security vulnerability disclosure process.
2449

2550
## License
26-
Copyright (c) 2024 Oracle and/or its affiliates.
2751

28-
Licensed under the Universal Permissive License (UPL), Version 1.0.
52+
Copyright (c) 2026 Oracle and/or its affiliates.
53+
54+
Released under the Universal Permissive License v1.0 as shown at <https://oss.oracle.com/licenses/upl/>.
2955

30-
See [LICENSE](LICENSE.txt) for more details.
56+
## Disclaimer
3157

32-
ORACLE AND ITS AFFILIATES DO NOT PROVIDE ANY WARRANTY WHATSOEVER, EXPRESS OR IMPLIED, FOR ANY SOFTWARE, MATERIAL OR CONTENT OF ANY KIND CONTAINED OR PRODUCED WITHIN THIS REPOSITORY, AND IN PARTICULAR SPECIFICALLY DISCLAIM ANY AND ALL IMPLIED WARRANTIES OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE. FURTHERMORE, ORACLE AND ITS AFFILIATES DO NOT REPRESENT THAT ANY CUSTOMARY SECURITY REVIEW HAS BEEN PERFORMED WITH RESPECT TO ANY SOFTWARE, MATERIAL OR CONTENT CONTAINED OR PRODUCED WITHIN THIS REPOSITORY. IN ADDITION, AND WITHOUT LIMITING THE FOREGOING, THIRD PARTIES MAY HAVE POSTED SOFTWARE, MATERIAL OR CONTENT TO THIS REPOSITORY WITHOUT ANY REVIEW. USE AT YOUR OWN RISK.
58+
ORACLE AND ITS AFFILIATES DO NOT PROVIDE ANY WARRANTY WHATSOEVER, EXPRESS OR IMPLIED, FOR ANY SOFTWARE, MATERIAL OR CONTENT OF ANY KIND CONTAINED OR PRODUCED WITHIN THIS REPOSITORY, AND IN PARTICULAR SPECIFICALLY DISCLAIM ANY AND ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE. FURTHERMORE, ORACLE AND ITS AFFILIATES DO NOT REPRESENT THAT ANY CUSTOMARY SECURITY REVIEW HAS BEEN PERFORMED WITH RESPECT TO ANY SOFTWARE, MATERIAL OR CONTENT CONTAINED OR PRODUCED WITHIN THIS REPOSITORY. IN ADDITION, AND WITHOUT LIMITING THE FOREGOING, THIRD PARTIES MAY HAVE POSTED SOFTWARE, MATERIAL OR CONTENT TO THIS REPOSITORY WITHOUT ANY WARRANTY OF ANY KIND, INCLUDING THAT THE CONTENT IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. ANY OPEN SOURCE SOFTWARE IS PROVIDED BY THE APPLICABLE LICENSOR "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.

labs/README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Labs
2+
3+
Self-contained, runnable labs that validate converged-model claims against a live **Oracle AI Database 26ai**. Each lab ships a Docker environment, a validator, and its own README, and runs itself nightly in CI so the proofs stay honest.
4+
5+
| Name | Description | Link |
6+
| --- | --- | --- |
7+
| converged-database-lab | Runnable proofs for the converged-database article series — JSON Relational Duality, single-table vs. converged modeling, graph, vector, spatial, and full-text claims, each executing against a free Oracle AI Database 26ai container. | [./converged-database-lab](./converged-database-lab) |
8+
9+
*More labs coming as the content series expands.*
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ORACLE_PASSWORD=LabAdmin2026
2+
LAB_PASSWORD=LabUser2026
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
.env
2+
*.log
3+
__pycache__/
4+
validator/results.json
5+
validator/.venv/
6+
docker/.data/
7+
*.pyc
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
# converged-database-lab
2+
3+
![validate](https://github.com/oracle-devrel/oracle-umt-developer-hub/actions/workflows/converged-database-lab.yml/badge.svg)
4+
5+
Runnable proofs for the converged-database article series — every technical claim in the articles executes here, nightly, against a free container.
6+
7+
**One truth. Many shapes. Every claim runs.**
8+
9+
---
10+
11+
## About the name: 26ai vs 23.26.x
12+
13+
Oracle AI Database 26ai is the product name — a long-term-support release announced October 2025. Container tags use a year.quarter version string convention, so `gvenzl/oracle-free:23.26.x` tags are the 26ai release line. Prose in this repo always says 26ai; the version string appears only where a tag or connection string requires it.
14+
15+
---
16+
17+
## Quickstart
18+
19+
```bash
20+
docker compose up -d --build oracle # ~2 GB image; first boot seeds the domain (~2 min)
21+
pip install -r validator/requirements.txt
22+
python validator/run.py # runs every module, prints ASSERT results
23+
```
24+
25+
If the container goes `unhealthy`, check `docker logs lab-oracle` — the most common cause is an ORDS install failure on first boot; `docker compose down -v && docker compose up -d --build oracle` usually resolves it.
26+
27+
**Connection cheatsheet**
28+
29+
| Interface | Connection string |
30+
|-----------|-------------------|
31+
| SQL | `LAB_USER/LabUser2026@localhost:1521/FREEPDB1` |
32+
| MongoDB API | `mongodb://LAB_USER:LabUser2026@localhost:27017/lab_user?authMechanism=PLAIN&authSource=$external&tls=false&loadBalanced=true&retryWrites=false` |
33+
| ORDS | `http://localhost:8181` |
34+
35+
These are demo credentials. Override via `.env` — see `.env.example`.
36+
37+
---
38+
39+
## The shared domain
40+
41+
All modules run against one deterministically seeded domain. Seeds use an LCG (seed 42) so `docker compose down -v && docker compose up -d --build oracle` produces byte-for-byte identical data every rebuild.
42+
43+
**Tables**
44+
45+
| Object | Rows | Data model exercised |
46+
|--------|------|----------------------|
47+
| `customers` | 200 | Relational — primary entity, FK target |
48+
| `products` | 50 | Relational + JSON (`attributes` column: color, warrantyMonths) |
49+
| `stores` | 6 | Relational + Spatial (`SDO_GEOMETRY`, WGS-84 coordinates) |
50+
| `orders` | 1,000 | Relational — transactional fact table |
51+
| `order_items` | ~2,500 (avg 2.5/order) | Relational — composite PK, line items |
52+
| `devices` | 40 | Relational — device fingerprints |
53+
| `customer_devices` | 200 | Relational — M:M link; graph edge source |
54+
| `referrals` | 64 | Relational — self-referential; graph edge source (60 chain + 4-hop cycle 10→11→12→13→10) |
55+
| `support_tickets` | 300 | Relational + Vector (`VECTOR(8, FLOAT32)` — 8-dim demo embeddings, see note) |
56+
57+
**JSON collection table**
58+
59+
| Object | Data model exercised |
60+
|--------|----------------------|
61+
| `events` | JSON-native collection (Oracle `JSON COLLECTION TABLE`) |
62+
63+
**JSON Relational Duality Views**
64+
65+
| View | Projection |
66+
|------|------------|
67+
| `customer_profile_dv` | Customer + nested orders + line items; writeable via MongoDB API |
68+
| `order_dv` | Order-centric shape over the same rows — second projection of one stored truth |
69+
70+
**Property graph**
71+
72+
| Object | Vertices / Edges |
73+
|--------|-----------------|
74+
| `customer_graph` | 240 vertices (200 customers + 40 devices); 264 edges (200 `customer_devices` + 64 `referrals`) |
75+
76+
**Indexes**
77+
78+
| Index | Type | Purpose |
79+
|-------|------|---------|
80+
| `idx_orders_customer` | B-tree | Customer order range scans |
81+
| `idx_items_product` | B-tree | Product-level aggregations |
82+
| `idx_tickets_customer` | B-tree | Per-customer ticket lookups |
83+
| `ticket_text_idx` | Oracle Text (SEARCH INDEX) | Full-text keyword search on ticket bodies |
84+
| `ticket_vec_idx` | Vector IVF (NEIGHBOR PARTITIONS, COSINE) | Approximate nearest-neighbor on embeddings |
85+
86+
**Note on embeddings:** The 8-dim vectors are deterministic demo values generated by the LCG seed. All engine behaviors demonstrated (distance functions, vector indexes, transactions, cross-model joins) are dimension-independent. Module 03 documents the optional real-model flow using `DBMS_VECTOR.LOAD_ONNX_MODEL` with all-MiniLM-L12-v2.
87+
88+
**Oracle AI Database 26ai Free limits:** 2 CPU / 2 GB SGA+PGA / 12 GB data. The compose file caps the container at 2 CPUs and 4 GB (headroom for ORDS and OS overhead).
89+
90+
---
91+
92+
## Modules
93+
94+
| # | Slug | Status | Proofs | Assertions | Links |
95+
|---|------|--------|--------|------------|-------|
96+
| 01 | `what-is-a-converged-database` | Live | 4 | 14 | [README](modules/01-what-is-a-converged-database/README.md) · article link lands at publish |
97+
| 02 | `converged-vs-multi-model` | Arrives with its article ||||
98+
| 03 | `vector-db-vs-converged` | Arrives with its article ||||
99+
| 04 | `ai-agents-enterprise-data` | Arrives with its article ||||
100+
| 05 | `json-graph-vector-relational-one-db` | Arrives with its article ||||
101+
| 06 | `polyglot-vs-converged` | Arrives with its article ||||
102+
| 07 | `reading-stonebraker-and-pavlo` | Arrives with its article ||||
103+
104+
---
105+
106+
## Validation contract
107+
108+
Scripts live in `modules/NN-slug/scripts/` and run in lexical order — modules first, then scripts within each module.
109+
110+
- **`*.sql`** — executed statement-by-statement via python-oracledb (thin mode) as `LAB_USER` against `localhost:1521/FREEPDB1`. PL/SQL blocks end with a line containing only `/`; plain SQL ends with `;`. The harness rolls back after each script so demos leave the domain unchanged.
111+
- **`*.js`** — executed with `mongosh` inside the `lab-oracle` container against the MongoDB API (port 27017). JS scripts auto-commit through the MongoDB API, so they must clean up explicitly — delete what they insert, restore what they update.
112+
113+
**Assertion convention:** SQL scripts assert by SELECTing a string of the form `ASSERT:<name>:PASS|FAIL` as the first column. JS scripts `print()` the same string. The validator harvests these lines and reports per-script.
114+
115+
**Results:** written to `validator/results.json` (gitignored).
116+
117+
**CI:** runs on push to `main`/`article/**`, on pull requests, and on a nightly cron (`17 6 * * *`). The job uploads `results.json` as a build artifact.
118+
119+
See [validator/README.md](validator/README.md) for the full authoring contract.
120+
121+
---
122+
123+
## MongoDB comparison profile
124+
125+
```bash
126+
docker compose --profile mongodb up -d
127+
```
128+
129+
Boots `mongo:8.2` as a single-node replica set (required for transactions) on host port 27027. Used for head-to-head demos in modules 03 and 06.
130+
131+
**Beta note:** `$vectorSearch`, `$search`, and `$changeStream` are beta in the Oracle 26ai MongoDB API per Oracle documentation. Modules that use these stages label them explicitly.
132+
133+
---
134+
135+
## Related work
136+
137+
- [github.com/rhoulihan/unified-model-theory](https://github.com/rhoulihan/unified-model-theory) — the UMT framework this lab demonstrates
138+
- Article links added as they publish
139+
140+
---
141+
142+
## License
143+
144+
Universal Permissive License v1.0 — see [LICENSE](LICENSE).
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
name: converged-database-lab
2+
3+
services:
4+
oracle:
5+
build:
6+
context: ./docker
7+
dockerfile: Dockerfile.oracle
8+
container_name: lab-oracle
9+
ports: ['1521:1521', '8181:8181', '27017:27017']
10+
environment:
11+
ORACLE_PASSWORD: '${ORACLE_PASSWORD:-LabAdmin2026}'
12+
APP_USER: 'LAB_USER'
13+
APP_USER_PASSWORD: '${LAB_PASSWORD:-LabUser2026}'
14+
volumes:
15+
- oracle-data:/opt/oracle/oradata
16+
healthcheck:
17+
test: ['CMD-SHELL', '/opt/oracle/healthcheck.sh && curl -so /dev/null -w "%{http_code}" http://localhost:8181/ | grep -q "302\|200"']
18+
interval: 15s
19+
timeout: 10s
20+
retries: 40
21+
start_period: 120s
22+
deploy:
23+
resources:
24+
limits: { cpus: '2', memory: 4G }
25+
26+
# Comparison target for head-to-head demos (modules 03/06). Single-node replica set
27+
# (transactions require it). Start with: docker compose --profile mongodb up -d
28+
mongodb:
29+
image: mongo:8.2
30+
container_name: lab-mongodb
31+
profiles: ['mongodb']
32+
command: ['mongod', '--replSet', 'rs0', '--bind_ip_all']
33+
ports: ['27027:27017']
34+
healthcheck:
35+
test: ['CMD', 'mongosh', '--quiet', '--eval', "try { rs.status().ok } catch (e) { rs.initiate().ok }"]
36+
interval: 10s
37+
timeout: 10s
38+
retries: 12
39+
40+
volumes:
41+
oracle-data:
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Oracle AI Database 26ai Free + ORDS + MongoDB API.
2+
# Note: gvenzl image tags use year.quarter numbering (23.26.x == the 26ai release line).
3+
FROM gvenzl/oracle-free:23.26.0-faststart
4+
5+
USER root
6+
COPY scripts/install-ords.sh /tmp/install-ords.sh
7+
RUN chmod +x /tmp/install-ords.sh && /tmp/install-ords.sh && rm /tmp/install-ords.sh
8+
RUN chown -R oracle:oinstall /etc/ords
9+
10+
# mongosh: used to verify and exercise the MongoDB API (port 27017) from inside
11+
# the container — the validator harness runs *.js scripts through it.
12+
RUN printf '[mongodb-org-8.0]\nname=MongoDB Repository\nbaseurl=https://repo.mongodb.org/yum/redhat/8/mongodb-org/8.0/x86_64/\ngpgcheck=1\nenabled=1\ngpgkey=https://pgp.mongodb.com/server-8.0.asc\n' > /etc/yum.repos.d/mongodb-org-8.0.repo \
13+
&& microdnf install -y mongodb-mongosh \
14+
&& microdnf clean all
15+
16+
# Bake Oracle's prebuilt augmented all-MiniLM-L12-v2 ONNX model into the image so
17+
# every fresh build (and CI) loads identical in-DB embeddings deterministically —
18+
# no network dependency at init time. This is the official model published by
19+
# Oracle Machine Learning: the 26ai docs "ONNX Pipeline Models: Text Embedding"
20+
# page redirects (/pls/topic/lookup?...&id=oml_ai_models_object_storage) to the
21+
# OML-ai-models object-storage bucket whose index lists this exact URL. The zip
22+
# (~122.6 MB) unpacks to all_MiniLM_L12_v2.onnx (~133.3 MB, 384-dim output),
23+
# loaded by docker/init/08-vector-model.sql via DBMS_VECTOR.LOAD_ONNX_MODEL.
24+
# Placed AFTER the ORDS + mongosh layers so their (slow) cache layers are reused
25+
# when only the model layer changes. Fails the build loudly if the URL stops
26+
# resolving rather than baking a broken image.
27+
ARG MINILM_URL=https://adwc4pm.objectstorage.us-ashburn-1.oci.customer-oci.com/p/TtH6hL2y25EypZ0-rrczRZ1aXp7v1ONbRBfCiT-BDBN8WLKQ3lgyW6RxCfIFLdA6/n/adwc4pm/b/OML-ai-models/o/all_MiniLM_L12_v2_augmented.zip
28+
RUN microdnf install -y unzip \
29+
&& microdnf clean all \
30+
&& mkdir -p /opt/oracle/models \
31+
&& curl -fsSL -o /tmp/minilm.zip "$MINILM_URL" \
32+
&& unzip -o /tmp/minilm.zip -d /opt/oracle/models \
33+
&& test -s /opt/oracle/models/all_MiniLM_L12_v2.onnx \
34+
&& rm -f /tmp/minilm.zip \
35+
&& chown -R oracle:oinstall /opt/oracle/models
36+
37+
COPY init/ /container-entrypoint-initdb.d/
38+
39+
COPY scripts/entrypoint.sh /opt/oracle/scripts/entrypoint.sh
40+
RUN chmod +x /opt/oracle/scripts/entrypoint.sh
41+
42+
USER oracle
43+
EXPOSE 1521 8181 27017
44+
ENTRYPOINT ["/opt/oracle/scripts/entrypoint.sh"]

labs/converged-database-lab/docker/init/.gitkeep

Whitespace-only changes.

0 commit comments

Comments
 (0)