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

Ale*_*sky 3 oracle docker

我从官方 dockerfile运行 Oracle Database 12.2.0.1。据我所知,如果我这样做

docker stop <container_id>
Run Code Online (Sandbox Code Playgroud)

数据库的当前状态丢失,下次它将做一些干净的启动。

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

如果我做

./sqlplus sys as sysdba
SHUTDOWN IMMEDIATE
Run Code Online (Sandbox Code Playgroud)

容器仍在运行并且仍然消耗 11GB 的 16GB RAM,所以据我所知,为了停止容器,我可能应该杀死一些进程,但不清楚我应该什么时候做

docker commit <container_id>
Run Code Online (Sandbox Code Playgroud)

所以理想情况下我需要类似 shutdown_oracle_and_commit_container.sh 的东西。

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

Sam*_*ipp 5

您应该使用 docker将数据库中的数据存储在容器外。因此,使用该-v选项并将您喜欢的任何路径安装到/opt/oracle/oradata容器内以存储数据。

文档

-v /opt/oracle/oradata

用于数据库的数据量。

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

如果省略,数据库将不会在容器重新创建时持久化。

所以根据那个运行:

docker run -v /path/to/your/datastore/:/opt/oracle/oradata oracle/database
Run Code Online (Sandbox Code Playgroud)

数据库中的数据现在存储在容器外。如果您使用docker stop <container_id>甚至docker rm <container_id>并且您再次重新创建容器,您的数据将是相同的。有关更多信息和配置参数,请参阅文档