"sqlplus": исполняемый файл не найден в $ PATH "при запуске команды с помощью docker exec - PullRequest
0 голосов
/ 08 октября 2018

Я хочу запустить Docker-контейнер с Oracle XE, а затем запустить сценарий 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

1 Ответ

0 голосов
/ 08 октября 2018

Расположение bin sqlplus добавляется к вашему PATH в .bashrc, смотрите эту строку в 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...