
gvenzl/oracle-free| 标签格式 | 支持状态 |
|---|---|
latest[-faststart] | 🔵 长期支持 |
slim[-faststart] | 🔵 长期支持 |
full[-faststart] | 🔵 长期支持 |
23[-faststart]23[-slim][-faststart]23[-full][-faststart] | 🟢 当前支持 |
23.9[-faststart]23.9[-slim][-faststart]23.9[-full][-faststart] | 🟢 当前支持 |
23.8[-faststart]23.8[-slim][-faststart]23.8[-full][-faststart] | 🟡 已过时 |
23.7[-faststart] 及更早版本 | 🔴 不再支持 |
方括号 [] 中的内容表示可选标签,例如 23[-slim][-faststart] 包含以下具体标签:
23、23-slim、23-faststart、23-slim-faststart。
| 状态标识 | 说明 |
|---|---|
| 🔵 长期支持 | 镜像长期维护,持续提供 bug 修复和常规更新。 |
| 🟢 当前支持 | 镜像处于活跃支持阶段,提供修复和更新。 |
| 🟡 已过时 | 镜像已过时,仅修复严重 bug,建议升级至新版本。 |
| 🔴 不再支持 | 镜像停止维护,无更新且可能随时移除,强烈不建议使用。 |
(容器删除后数据丢失,但重启容器数据保留)
shelldocker run -d -p 1521:1521 -e ORACLE_PASSWORD=<你的密码> gvenzl/oracle-free
(数据保存在卷中,不受容器生命周期影响)
shelldocker run -d -p 1521:1521 -e ORACLE_PASSWORD=<你的密码> -v oracle-volume:/opt/oracle/oradata gvenzl/oracle-free
shelldocker exec <容器名或ID> resetPassword <新密码>
从 Oracle Database 23.5 Free 开始,提供 ARM 架构版本,镜像已支持多平台(multi-arch)。
以下项目已采用该镜像:
若你的项目使用了该镜像,可通过 GitHub Issue 申请添加到列表。
| 类型 | 标签后缀 | 说明 | 适用场景 |
|---|---|---|---|
| Slim | -slim | 最小化镜像,仅保留核心功能,牺牲部分扩展能力换取更小体积。 | 对镜像大小敏感,且无需 Oracle 高级功能的场景。 |
| 标准 | 无 | 平衡体积与功能,推荐大多数场景使用。 | 常规开发、测试、小型生产环境。 |
| Full | -full | 包含 Oracle 数据库完整功能,基于官方安装包构建。 | 需要自定义扩展或深度定制数据库的场景。 |
| Faststart | *-faststart | 内置预初始化数据库,启动速度更快,但镜像体积较大。 | 自动化测试(频繁启停容器且无需持久化数据)。 |
各类型镜像的具体修改内容可参考 ImageDetails.md。
环境变量用于自定义容器初始化(仅首次启动时生效):
ORACLE_PASSWORD(必填)设置 SYS 和 SYSTEM 用户的初始密码。
ORACLE_RANDOM_PASSWORD(可选)设为非空值(如 yes),自动生成 SYS 和 SYSTEM 的随机密码,密码会打印到日志(格式:ORACLE PASSWORD FOR SYS AND SYSTEM: ...)。
ORACLE_DATABASE(可选)指定要创建或插拔的 PDB 名称。若容器内 /pdb-plug 目录存在 <名称>.pdb 文件,则自动插拔该 PDB;否则创建新 PDB。支持逗号分隔多 PDB(如 PDB1,PDB2)。
注意:创建新 PDB 会增加首次启动时间,若无需自定义 PDB,可直接使用默认的
FREEPDB1。
APP_USER(可选)创建应用用户,需配合 APP_USER_PASSWORD 或 APP_USER_PASSWORD_FILE 使用。18c+ 版本默认在 FREEPDB1 中创建,若指定 ORACLE_DATABASE,则同时在对应 PDB 中创建。
APP_USER_PASSWORD(可选)APP_USER 的密码,需与 APP_USER 同时指定。
通过 GitHub Marketplace 的 Setup Oracle DB Free 动作快速集成:
yamljobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: gvenzl/setup-oracle-free@v1 with: app-user: <应用用户名> app-user-password: <用户密码>
直接定义为服务容器(Service Container):
yamlservices: oracle: image: gvenzl/oracle-free:latest # 可替换为其他标签 env: ORACLE_RANDOM_PASSWORD: true # 随机生成管理员密码 APP_USER: my_user # 创建应用用户 APP_USER_PASSWORD: <用户密码> ports: - 1521:1521 # 映射数据库端口 # 健康检查配置 options: >- --health-cmd healthcheck.sh --health-interval 10s --health-timeout 5s --health-retries 10
连接信息:
oracle(容器内)或 localhost(宿主机)1521FREEPDB1my_user(上述配置中的 APP_USER)通过 Docker Compose 快速搭建开发/测试环境:
yamlversion: "3.8" services: oracle: image: gvenzl/oracle-free:latest # 镜像标签 ports: - "1521:1521" # 端口映射 environment: ORACLE_PASSWORD: sys密码 # SYS/SYSTEM 密码 APP_USER: my_user # 应用用户 APP_USER_PASSWORD: 用户密码 # 用户密码 healthcheck: # 健康检查 test: ["CMD", "healthcheck.sh"] interval: 10s timeout: 5s retries: 10 volumes: - ./my-init.sql:/container-entrypoint-initdb.d/my-init.sql:ro # 挂载初始化脚本
连接信息:
oracle;宿主机:localhost1521FREEPDB1通过内置命令 createAppUser 创建额外用户(含标准权限):
shell# 用法:createAppUser 用户名 密码 [目标PDB,默认FREEPDB1] docker exec <容器名或ID> createAppUser <应用用户> <用户密码> [<目标PDB>]
示例:在 PDB1 中创建用户 app_user,密码 app_pwd:
shelldocker exec my-oracle createAppUser app_user app_pwd PDB1
将 <PDB名称>.pdb 文件放入容器内 /pdb-plug 目录,并通过 ORACLE_DATABASE 指定 PDB 名称,即可自动插拔 PDB。
敏感信息(如密码)可通过文件传入,只需在环境变量后添加 _FILE 后缀,从容器内文件读取值。例如:
shelldocker run -d --name oracle-db -e ORACLE_PASSWORD_FILE=/run/secrets/oracle-passwd gvenzl/oracle-free
支持的变量:APP_USER_PASSWORD_FILE、ORACLE_PASSWORD_FILE、ORACLE_DATABASE_FILE。
不同容器技术(Docker/Podman/Kubernetes)的密钥管理机制不同,建议参考官方文档。
容器首次启动时,会执行 /container-entrypoint-initdb.d 目录下的脚本(支持 *.sql、*.sql.gz、*.sql.zip、*.sh),按字母顺序执行(含子目录)。
*.sql/*.sql.gz/*.sql.zip:通过 SQL*Plus 以 SYS 用户连接到 FREE 实例执行,可用于创建 PDB、表空间等。若需初始化应用 schema,需在脚本中显式连接目标用户。*.sh:可执行脚本(带 x 权限)在新 shell 中运行;非可执行脚本会被 source 到当前 shell(可能影响环境变量,建议设为可执行)。本地创建 init_scripts 目录,包含以下文件:
1_create_user.sql:创建用户
sqlALTER SESSION SET CONTAINER=FREEPDB1; CREATE USER TEST IDENTIFIED BY test QUOTA UNLIMITED ON USERS; GRANT CONNECT, RESOURCE TO TEST;
2_init_data.sh:下载并执行数据脚本
bashcurl -LJO [***] sqlplus -s test/test@//localhost/FREEPDB1 @install.sql rm install.sql
启动容器时挂载目录:
shelldocker run -d -p 1521:1521 -e ORACLE_RANDOM_PASSWORD=yes -v ./init_scripts:/container-entrypoint-initdb.d gvenzl/oracle-free:23-slim
注意:脚本仅在首次初始化时执行,已有数据库不会重复执行。
若需在每次数据库启动后执行操作,可将脚本放入 /container-entrypoint-startdb.d 目录(支持文件类型与初始化脚本相同),每次容器启动(含重启)后执行。
数据库配置脚本可参考 config-scripts 目录。
如有问题或建议,可通过 GitHub Issues 提交。





manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务