如何在 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 &lt; [my SQL script]

【问题讨论】:

【参考方案1】:

根据exec documentation:

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

示例:docker exec -ti my_container "echo a &amp;&amp; echo b" 不会工作,但docker exec -ti my_container sh -c "echo a &amp;&amp; echo b" 会。

你应该试试:

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

【讨论】:

它有效。感谢您指出文档。我完全错过了命令的一个警告。

以上是关于如何在 Docker 容器内的 CockroachDB 中运行 SQL 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Windows 主机连接到 wsl2 内的 docker 容器内的应用程序?

如何从 docker 容器内的主机工作站获取 aws 凭据

如何拷贝Docker容器内的文件?

如何将 PyCharm 连接到位于 Docker 容器内的 python 解释器?

如何将安装在主机服务器上的 phpmyadmin 连接到正在运行的 docker 容器内的 maria db? [关闭]

udevadm 不显示 docker 容器内的所有属性