我有一个使用Oracle作为其数据库的应用程序,我正在努力让Dockerized版本的Oracle在本地运行。我正在使用this Oracle image,到目前为止,它正如广告所说的那样完美而完美地工作!我把它拉了下来,就像这样运行它:
docker run -d -p 8080:8080 -p 1521:1521 sath89/oracle-12c
容器启动和运行需要一段时间,实际上是几分钟。下面你可以看到我在大约3分钟的过程中多次运行docker logs
命令并且每次都获得越来越多的输出,直到它最终站起来并运行!
MyUser:~ myuser$ docker logs f0a177ed739f
Database not initialized. Initializing database.
Starting tnslsnr
MyUser:~ myuser$ docker logs f0a177ed739f
Database not initialized. Initializing database.
Starting tnslsnr
Copying database files
1% complete
3% complete
11% complete
MyUser:~ myuser$ docker logs f0a177ed739f
Database not initialized. Initializing database.
Starting tnslsnr
Copying database files
1% complete
3% complete
11% complete
18% complete
26% complete
37% complete
Creating and starting Oracle instance
40% complete
45% complete
MyUser:~ myuser$ docker logs f0a177ed739f
Database not initialized. Initializing database.
Starting tnslsnr
Copying database files
1% complete
3% complete
11% complete
18% complete
26% complete
37% complete
Creating and starting Oracle instance
40% complete
45% complete
50% complete
55% complete
56% complete
60% complete
62% complete
Completing Database Creation
66% complete
70% complete
73% complete
85% complete
96% complete
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/xe/xe.log" for further details.
Configuring Apex console
Database initialized. Please visit http://#containeer:8080/em http://#containeer:8080/apex for extra configuration if needed
Starting web management console
PL/SQL procedure successfully completed.
Starting import from '/docker-entrypoint-initdb.d':
found file /docker-entrypoint-initdb.d//docker-entrypoint-initdb.d/*
[IMPORT] /entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*
Import finished
Database ready to use. Enjoy! ;)
然后,我可以使用像SQLDeveloper这样的工具连接到localhost:1521
并创建表格,类型等。到目前为止一切顺利!
但是,我立刻杀了这个容器(docker stop
和docker rm
),我所做的所有更改都会丢失!换句话说,下次我运行容器时(使用完全相同的docker run
命令),还需要另外3-4分钟来初始化,然后我的所有更改(表创建等)来自上次会议现在不见了!
有没有办法告诉Docker(可能是docker run
命令的附加arg)将所有数据存储在我的主机/本地文件系统的某个地方?例如,我可以在~/myappdb/data
下创建一个“data dir”,然后告诉Docker和/或容器内的Oracle DB将所有数据存储到~/myappdb/data
,这样每次我杀了+重新启动容器我的数据是否持久化?
答案 0 :(得分:2)
您可以使用docker run
命令的参数-v
或--volume
将数据库数据文件夹绑定到主机文件夹:
docker run -d -p 8080:8080 -p 1521:1521 -v ~/myappdb/data:/u01/app/oracle sath89/oracle-12c
在image sath89/oracle-12c
的文档中,他们将容器的/u01/app/oracle
文件夹绑定到主机文件夹/my/oracle/data
。