如何关闭docker容器内的oracle数据库?

时间:2019-03-14 18:32:42

标签: oracle docker

我从official dockerfile运行Oracle Database 12.2.0.1。据我所知

docker stop <container_id>

数据库的当前状态丢失,下次它将重新启动。

如何正确关闭数据库并停止容器,但保存当前状态?

如果我愿意

./sqlplus sys as sysdba
SHUTDOWN IMMEDIATE

容器仍在运行,并且仍消耗11GB的16GB RAM,因此,据我估计,要停止容器,我可能应该终止某些进程,但尚不清楚何时应该执行该操作

docker commit <container_id>

所以理想情况下,我需要像shutdown_oracle_and_commit_container.sh这样的东西。

在docker容器中,oracle实例以runOracle.sh启动,但没有stopOracle.sh

2 个答案:

答案 0 :(得分:4)

您应该使用泊坞窗volume将来自数据库的数据存储在容器之外。因此,请使用-v选项,并将您想要存储数据的任何路径装入容器内的/opt/oracle/oradata

来自docs

  

-v / opt / oracle / oradata

     

用于数据库的数据量。

     

容器中的Unix“ oracle”(uid:54321)用户必须可以写!

     

如果省略,数据库将不会通过容器重新创建而保留。

因此,根据该运行:

docker run -v /path/to/your/datastore/:/opt/oracle/oradata oracle/database

数据库中的数据现在存储在容器外部。如果您使用docker stop <container_id>或什至docker rm <container_id>并再次重新创建容器,则数据将相同。有关更多信息和配置参数,请参见docs

答案 1 :(得分:0)

要关闭 docker 容器内的数据库,首先

  • 以交互模式进入容器,执行:
docker exec -it <name> /bin/bash

如果你使用默认名称, = myxedb

  • 启动 sqlplus 并登录到您的数据库(以 sysdba 身份)
sqlplus /nolog
conn sys/***@<db> as sysdba

就我而言, = //localhost:1521/XE

  • 发出关机程序
shutdown immediate

就是这样。