如何在 Docker 容器内的 CockroachDB 中运行 SQL 脚本?

sar*_*gas 5 docker cockroachdb

我使用以下内容启动了一个 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
Run Code Online (Sandbox Code Playgroud)

/sql目录有init.sql,这是一个我希望数据库运行的 SQL 脚本,这是我尝试运行的命令:

docker exec node1 \
"/cockroach/cockroach sql --insecure < /cockroach/sql/init.sql"
Run Code Online (Sandbox Code Playgroud)

这是我收到的错误:

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
Run Code Online (Sandbox Code Playgroud)

但是,如果我docker exec -ti node1 /bin/bash手动运行相同的命令,它就会起作用。

如何cockroach sql --insecure < [my SQL script]从容器外部运行?

小智 5

根据执行文档

COMMAND 应该是可执行文件,链接或引用的命令将不起作用。

示例: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"
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

2023 次

最近记录:

7 年,7 月 前