如何在 Docker 容器内的 CockroachDB 中 运行 一个 SQL 脚本?
How do I run a SQL script in CockroachDB inside a Docker container?
我用以下内容启动了一个 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 should be an executable, a chained or a quoted command will
not work.
Example: docker exec -ti my_container "echo a && echo b"
will not work, but docker exec -ti my_container sh -c "echo a && echo b"
will.
你应该试试:
docker exec -ti node1 \
sh -c "/cockroach/cockroach sql --insecure < /cockroach/sql/init.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 should be an executable, a chained or a quoted command will not work.
Example:
docker exec -ti my_container "echo a && echo b"
will not work, butdocker exec -ti my_container sh -c "echo a && echo b"
will.
你应该试试:
docker exec -ti node1 \
sh -c "/cockroach/cockroach sql --insecure < /cockroach/sql/init.sql"