将Docker化Oracle数据库数据存储至本地持久化目录
实现sath89/oracle-12c Docker容器数据本地持久化
很高兴听到这个Oracle镜像运行得很顺畅!要把数据库数据持久化到本地目录其实很简单,核心就是利用Docker的绑定挂载功能,把容器内Oracle的核心数据目录映射到你本地的文件夹。下面是具体操作步骤:
步骤1:创建本地持久化目录并配置权限
先在本地机器上创建一个专门存放Oracle数据的目录,比如我习惯放在用户主目录下:
mkdir -p ~/oracle-persist-data
这个镜像里的Oracle进程是用oracle用户运行的,它的UID是54321。为了避免后续容器写入数据时出现权限错误,需要给本地目录设置对应权限:
sudo chown 54321:54321 ~/oracle-persist-data
如果只是本地测试不想纠结权限细节,也可以用宽松的权限设置(不推荐生产环境使用):
sudo chmod 777 ~/oracle-persist-data
步骤2:挂载目录启动容器
修改你原来的docker run命令,加上-v参数把本地目录挂载到容器内的Oracle数据目录(这个镜像的固定数据路径是/u01/app/oracle):
docker run -d -p 8080:8080 -p 1521:1521 -v ~/oracle-persist-data:/u01/app/oracle sath89/oracle-12c
这里的-v 本地路径:容器内路径是Docker绑定挂载的语法,它会让容器内的所有数据写入操作都同步到你的本地目录。
关键注意事项
- 首次启动:第一次用挂载目录启动时,容器还是会花几分钟初始化数据库,这时候初始化的所有数据都会直接写入你本地的目录里。
- 后续启动:之后再启动容器时,会直接读取本地目录里的已有数据,不需要重新初始化,启动速度会快很多!
- 数据备份:要备份数据库的话,直接打包本地的
~/oracle-persist-data目录就行,比在容器里导出数据更高效。 - 禁止手动修改:不要在容器运行时手动修改本地目录里的Oracle数据文件,很容易导致数据库损坏。
如果已有运行中的容器(带数据)
如果你之前已经启动过容器并且里面有数据,想迁移到本地持久化目录,可以按以下步骤操作:
- 先停止正在运行的容器:
docker stop <你的容器ID或名称>
- 把容器内的Oracle数据复制到本地目录:
docker cp <你的容器ID或名称>:/u01/app/oracle ~/oracle-persist-data
- 删除原来的容器,再用上面的挂载命令启动新容器即可。
内容的提问来源于stack exchange,提问作者smeeb
相关产品推荐
相关产品推荐

