docker - 如何在 Docker 容器内的 CockroachDB 中运行 SQL 脚本?
问题描述
我使用以下内容启动了 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]
从容器外部运行?
解决方案
根据执行文档:
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"
推荐阅读
- php - foreach 循环中的 PHP 替换仅替换数组列表中的最后一项
- javascript - 更改动态添加的 div 的 ID
- c++ - 如何在 Visual Studio 2015 中显示构建时剩余文件的数量
- javascript - 如何修复 .map 中的数组编号错误
- arrays - 有没有办法在过滤器之后拆分数组
- javascript - 无法读取未定义的“on”属性?-> 错误
- python - 从图形 matplotlib 烛台中删除缺少的日期空间和技巧标签
- javascript - 如何在 .NET MVC 应用程序中呈现 href 标记内的部分视图
- c# - Mongo C#驱动程序使用elemMatch时如何从投影中排除元素?
- pandas - 带有跳过合并单元格的 Pandas 读取 Excel