【问题标题】:How do I run a SQL script in CockroachDB inside a Docker container?如何在 Docker 容器内的 CockroachDB 中运行 SQL 脚本?
【发布时间】: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]

【问题讨论】:

    标签: docker cockroachdb


    【解决方案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"
    

    【讨论】:

    • 它有效。感谢您指出文档。我完全错过了命令的一个警告。
    猜你喜欢
    • 1970-01-01
    • 2019-08-27
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2020-12-26
    相关资源
    最近更新 更多