Как запустить скрипт SQL в CockroachDB внутри контейнера Docker? - PullRequest
0 голосов
/ 09 мая 2018

Я запустил контейнер CockroachDB со следующим:

docker run -d --name=node1 --hostname=node1 \
--network=db -p 26257:26257 -p 8080:8080 \
-v "${PWD}/sql:/cockroach/sql" \
-v "${PWD}/cockroach-data/node1:/cockroach/cockroach-data" \ 
cockroachdb/cockroach:v2.0.1 start --insecure

В каталоге /sql есть init.sql, который является сценарием SQL. Я хочу, чтобы база данных запускалась, это команда, которую я пытаюсь выполнить:

docker exec node1 \
"/cockroach/cockroach sql --insecure < /cockroach/sql/init.sql"

И это ошибка, которую я получаю:

OCI runtime exec failed: exec failed: container_linux.go:348:
starting container process caused
"exec: \"/cockroach/cockroach sql --insecure < /cockroach/sql/init.sql\":
stat /cockroach/cockroach sql --insecure < /cockroach/sql/init.sql:
no such file or directory": unknown

Однако, если я docker exec -ti node1 /bin/bash и выполню ту же команду вручную, она сработает.

Как мне запустить cockroach sql --insecure < [my SQL script] снаружи контейнера?

1 Ответ

0 голосов
/ 09 мая 2018

Согласно документации exec :

КОМАНДА должна быть исполняемой командой или командой в кавычках не работает.

Пример: docker exec -ti my_container "echo a && echo b" не будет работать, но docker exec -ti my_container sh -c "echo a && echo b" будет.

Вы должны попробовать:

docker exec -ti node1 \
sh -c "/cockroach/cockroach sql --insecure < /cockroach/sql/init.sql"
...