如何从运行Docker容器中获取Oracle-xe-11g备份

我正在rancher操作系统上运行oracle-xe-11g。 我想采取我的数据库的数据备份。 当我尝试了命令

docker exec -it $Container_Name /bin/bash 

然后我input:

 exp userid=username/password file=test.dmp 

它工作正常,并创build了test.dump文件。

但我想用docker exec命令本身运行命令。 当我尝试这个命令:

 docker exec $Container_Name sh -C exp userid=username/password file=test.dmp 

我收到此错误消息: sh: 0: Can't open exp.

问题是:使用-c开关运行bash ,它不会以交互式或loginshell运行,所以bash不会读取相同的启动脚本。 在/etc/profile~/.bash_profile~/.bash_login~/.profile设置的任何东西都会被跳过。

解决方法:

使用以下命令运行您的容器:

 sudo docker run -d --name Oracle-DB -p 49160:22 -p 1521:1521 -e ORACLE_ALLOW_REMOTE=true -e ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe -e PATH=/u01/app/oracle/product/11.2.0/xe/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin -e ORACLE_SID=XE -e SHLVL=1 wnameless/oracle-xe-11g 

我正在做的是使用docker指定在容器中设置的环境variables。

现在为了生成备份文件:

 sudo docker exec -it e0e6a0d3e6a9 /bin/bash -c "exp userid=system/oracle file=/test.dmp" 

请注意,该文件将在容器内创build,所以您需要通过docker cp command将其复制到docker主机