gpt4 book ai didi

oracle - "sqlplus": executable file not found in $PATH"when running a command with docker exec

转载 作者:行者123 更新时间:2023-12-02 18:10:56 32 4
gpt4 key购买 nike

我想用 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com