“ sqlplus”:使用docker exec运行命令时在$ PATH中找不到可执行文件

时间:2018-10-08 14:44:32

标签: oracle docker

我想使用Oracle XE启动Docker容器,然后运行SQL脚本(ddl.sql)创建一些表。

如果我分别执行所有步骤,则一切正常:

$ docker run -d --name db --rm -p 49161:1521 -v "C:/data/workspace/vpk/":/home/vpk -e ORACLE_ALLOW_REMOTE=true wnameless/oracle-xe-11g

在容器中运行终端:

$ docker exec -it db bash

执行脚本:

root@f3ae34d554af:/# echo exit | sqlplus system/oracle@xe @/home/vpk/ddl.sql

但是,当我尝试将最后两个步骤合并为一个时:

$ docker exec db sqlplus system/oracle@xe @/home/vpk/ddl.sql

我得到了错误:

OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused "exec: \"sqlplus\": executable file not found in $PATH": unknown

使用sqlplus的完整路径也无济于事:

$ docker exec db bash -c "/u01/app/oracle/product/11.2.0/xe/bin/sqlplus system/oracle@xe /home/vpk/ddl.sql"
Error 6 initializing SQL*Plus
SP2-0667: Message file sp1<lang>.msb not found
SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory

错误原因是什么?

在@maxm的帮助下,我能够成功运行:

docker exec -it db /bin/bash -c "ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe /u01/app/oracle/product/11.2.0/xe/bin/sqlplus system/oracle@xe @/home/vpk/ddl.sql"

但是,我之后希望退出sqlplus提示符。但是,当我尝试向其中添加echo exit并运行时:

docker exec -it db /bin/bash -c "ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe; echo exit | /u01/app/oracle/product/11.2.0/xe/bin/sqlplus system/oracle@xe @/home/vpk/ddl.sql"

我得到了错误:

Error 6 initializing SQL*Plus
SP2-0667: Message file sp1<lang>.msb not found
SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory

2 个答案:

答案 0 :(得分:3)

sqlplus箱位置已添加到.bashrc中的PATH中,请参见setup中的这一行:

echo 'export PATH=$ORACLE_HOME/bin:$PATH' >> /etc/bash.bashrc

当直接运行exec而不调用bash时,它将尝试使用sh -c运行命令,并且不会加载.bashrc。尝试运行此命令以直接运行文件:

docker exec db /u01/app/oracle/product/11.2.0/xe/bin/sqlplus system/oracle@xe @/home/vpk/ddl.sql

尽管我也使用bash -c "command"运行,但可能加载了.bashrc,但似乎没有,可能想了解bash如何加载.bashrc文件。

编辑:

未设置ORACLE_HOME下面的注释中所引用的。此命令应该起作用:

docker exec -it db /bin/bash -c "ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe /u01/app/oracle/product/11.2.0/xe/bin/sqlplus system/oracle@xe /home/vpk/ddl.sql"

答案 1 :(得分:0)

我知道对我而言,这似乎有些“傻”,但请记住要留出时间来实例化实例。第12c企业版,第9页。例如,大约需要10分钟才能完全实例化并创建要使用的数据库