作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想用 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
最佳答案
sqlplus
bin 位置已添加到 .bashrc 中的 PATH,请参阅 setup 中的这一行:
echo 'export PATH=$ORACLE_HOME/bin:$PATH' >> /etc/bash.bashrc
当你不调用 bash
直接运行 exec 时它将尝试使用 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"
关于oracle - "sqlplus": executable file not found in $PATH"when running a command with docker exec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52704762/
我是一名优秀的程序员,十分优秀!