我有一个应用程序,它使用Oracle作为它的DB,我正在键入一个在本地工作。我使用的是这个甲骨文图像,到目前为止,它的工作非常漂亮,完全如广告所示!我拉了它,然后像这样运行它:
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下创建一个“数据dir”,然后告诉驻留在容器中的Docker和/或Oracle将其所有数据存储到~/myappdb/data,以便每次我杀死+重新启动容器时,我的数据就会被持久化?
发布于 2018-03-21 19:47:34
可以使用-v命令的参数docker run或--volume将数据库数据文件夹绑定到主机文件夹:
docker run -d -p 8080:8080 -p 1521:1521 -v ~/myappdb/data:/u01/app/oracle sath89/oracle-12c在sath89/oracle-12c文档中,它们将容器的/u01/app/oracle文件夹绑定到主机文件夹/my/oracle/data。
https://stackoverflow.com/questions/49411766
复制相似问题