如何在 Docker 容器内的 CockroachDB 中运行 SQL 脚本?
Posted
技术标签:
【中文标题】如何在 Docker 容器内的 CockroachDB 中运行 SQL 脚本?【英文标题】:How do I run a SQL script in CockroachDB inside a Docker container? 【发布时间】:2018-10-18 22:13:21 【问题描述】:我使用以下内容启动了 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】:根据exec documentation:
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"
【讨论】:
它有效。感谢您指出文档。我完全错过了命令的一个警告。以上是关于如何在 Docker 容器内的 CockroachDB 中运行 SQL 脚本?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Windows 主机连接到 wsl2 内的 docker 容器内的应用程序?
如何将 PyCharm 连接到位于 Docker 容器内的 python 解释器?
如何将安装在主机服务器上的 phpmyadmin 连接到正在运行的 docker 容器内的 maria db? [关闭]