使用Docker容器运行Oracle数据库方式

 更新时间:2025年05月30日 09:50:44   作者:catoop  
这篇文章主要介绍了使用Docker容器运行Oracle数据库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

在实际开发中,大部分时间可能都在开发、测试和验证工作,有些时候我们需要快速使用一个临时 oracle 数据库来做开发或者验证工作,而又会因为 oracle 安装麻烦而烦恼。

这种快速临时性需求,我们可以选中使用 docker 容器的方式运行一个 oracle 数据库,官方也给出了对应的镜像,包括 amd64 和 arm64 架构的都有。

启动容器

  • docker-compose.yml
services:
  oracle:
    image: container-registry.oracle.com/database/enterprise:19.3.0.0
    container_name: oracledb
    ports:
      - 1521:1521
      - 5500:5500
    volumes:
      - ./oracle/oradata:/opt/oracle/oradata
    environment:
      TZ: Asia/Shanghai
      ORACLE_SID: orcl
      ORACLE_PWD: oracle123456
      ENABLE_ARCHIVELOG: true
    logging:
      driver: "json-file"
      options:
        max-size: "1g"
        max-file: "20"
  • 或者直接运行脚本启动容器:
docker run -d --name oracledb \
 -p 1521:1521 -p 5500:5500 \
 -e ORACLE_SID=orcl \
 -e ORACLE_PWD=oracle123456 \
 -e ENABLE_ARCHIVELOG=true \
 -v /opt/soft/oracle/oradata:/opt/oracle/oradata \
container-registry.oracle.com/database/enterprise:19.3.0.0

注意提前创建 oradata 目录,并且为该目录设置 chmod 777 权限,否则会出现容器挂载后写入数据不正常的问题(如果是权限问题日志中会有权限问题的相关内容)。

  • 容器环境变量更多参数说明如下:
Parameters:
 --name:                 The name of the container (default: auto generated
 -p:                     The port mapping of the host port to the container port.
                         Two ports are exposed: 1521 (Oracle Listener), 5500 (OEM Express)
 -e ORACLE_SID:          The Oracle Database SID that should be used (default:ORCLCDB)
 -e ORACLE_PDB:          The Oracle Database PDB name that should be used (default: ORCLPDB1)
 -e ORACLE_PWD:          The Oracle Database SYS, SYSTEM and PDBADMIN password (default: auto generated)
 -e INIT_SGA_SIZE:       The total memory in MB that should be used for all SGA components (optional)
 -e INIT_PGA_SIZE:       The target aggregate PGA memory in MB that should be used for all server processes attached to the instance (optional)
 -e ORACLE_EDITION:      The Oracle Database Edition (enterprise/standard, default: enterprise)
 -e ORACLE_CHARACTERSET: The character set to use when creating the database (default: AL32UTF8)
 -e ENABLE_ARCHIVELOG:   To enable archive log mode when creating the database (default: false). Supported 19.3 onwards.
 -v /opt/oracle/oradata
                         The data volume to use for the database. Has to be writable by the Unix "oracle" (uid: 54321) user inside the container
                         If omitted the database will not be persisted over container recreation.
 -v /opt/oracle/scripts/startup | /docker-entrypoint-initdb.d/startup
                         Optional: A volume with custom scripts to be run after database startup.
                         For further details see the "Running scripts after setup and on
                         startup" section below.
 -v /opt/oracle/scripts/setup | /docker-entrypoint-initdb.d/setup
                         Optional: A volume with custom scripts to be run after database setup.
                         For further details see the "Running scripts after setup and on startup" section below.

常用命令

连接到容器内SQLPlus

  • 通过使用以下命令之一从容器中执行SQL*Plus命令,可以连接到Oracle数据库服务器:
$ docker exec -it <oracle-db> sqlplus / as sysdba
$ docker exec -it <oracle-db> sqlplus sys/<your_password>@<your_SID> as sysdba
$ docker exec -it <oracle-db> sqlplus system/<your_password>@<your_SID>
$ docker exec -it <oracle-db> sqlplus pdbadmin/<your_password>@<your_PDBname>

更改SYS用户的默认密码

在容器的第一次启动时,如果没有提供,将为数据库生成一个随机密码。在创建数据库并且相应的容器处于健康状态后,用户必须强制更改密码。

使用docker exec命令,通过调用容器中的setPassword.sh脚本来更改这些帐户的密码。请注意,容器必须正在运行。

  • 例如:
$ docker exec <oracle-db> ./setPassword.sh <your_password>

浏览器登录 Oracle EM Express

容器中的Oracle数据库还配置了Oracle Enterprise Manager Database Express(EM Express)。

要访问EM Express,请使用浏览器访问以下URL:

https://localhost:5500/em/

注:其中 localhost 修改为自己实际的服务器 IP 地址。

点击链接《官方文档资料》 查阅官方资料关于容器创建后的更多详细说明。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 使用 VPS 下载 Docker 镜像并导入到本地服务器的过程

    使用 VPS 下载 Docker 镜像并导入到本地服务器的过程

    这篇文章主要介绍了使用 VPS 下载 Docker 镜像并导入到本地服务器,通过使用 VPS 下载 Docker 镜像并将其传输到本地服务器,我们可以克服网络限制,更灵活地管理和部署 Docker 镜像,需要的朋友可以参考下
    2024-08-08
  • Docker配置本地仓库web访问的实现

    Docker配置本地仓库web访问的实现

    本文主要介绍了Docker配置本地仓库web访问的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • Docker安装Mosquitto的实现示例

    Docker安装Mosquitto的实现示例

    mosquitto是一个常用的MQTT应用服务,本文主要介绍了Docker安装Mosquitto的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • Docker 批量删除容器与镜像高效清理资源的完整指南

    Docker 批量删除容器与镜像高效清理资源的完整指南

    这篇文章主要介绍了Docker 批量删除容器与镜像高效清理资源的完整指南,本文将系统性地介绍如何安全、高效地批量删除容器和镜像,并提供实用命令与自动化建议,需要的朋友可以参考下
    2026-03-03
  • docker安装minio及实现文件上传、删除、下载方式

    docker安装minio及实现文件上传、删除、下载方式

    这篇文章主要介绍了docker安装minio及实现文件上传、删除、下载方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • docker一键安装wordpress的方法步骤

    docker一键安装wordpress的方法步骤

    这篇文章主要介绍了docker一键安装wordpress的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Docker网络模型以及容器通信详解续篇

    Docker网络模型以及容器通信详解续篇

    这篇文章主要介绍了Docker网络模型以及容器通信详解续篇的相关资料,通过学习Docker网路驱动模型,更好地解决容器间的通信问题,需要的朋友可以参考下
    2022-11-11
  • docker进入容器运行命令的使用及说明

    docker进入容器运行命令的使用及说明

    本文介绍了如何使用Docker进入容器进行调试、管理和运行命令,主要包括使用docker exec、docker attach和nsenter命令进入容器的方法,并详细介绍了docker inspect命令的使用以及如何获取容器/镜像的元数据
    2026-02-02
  • Docker部署PostgreSQL+PostGIS服务的实现

    Docker部署PostgreSQL+PostGIS服务的实现

    本文介绍了如何使用Docker快速部署PostgreSQL,并手动安装PostGIS模块,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-12-12
  • Dokcer部署双主Mysql的详细步骤

    Dokcer部署双主Mysql的详细步骤

    文章介绍了如何创建MySQL主从复制容器,并配置主从关系,主要步骤包括创建容器、创建角色、配置MySQL从数据库以连接到主数据库,并确保配置参数正确,感兴趣的朋友一起看看吧
    2025-01-01

最新评论