Я хочу запустить 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