如何在Docker容器内的CockroachDB中正确运行SQL脚本?
解决CockroachDB容器中执行init.sql脚本的问题
你的问题出在命令的引号使用上——把带重定向的完整命令放进引号后,容器内的Shell无法正确解析<这个输入重定向操作,因为引号会将整个内容当作单个参数传递,而不是交给Shell去处理重定向逻辑。
这里有两种可靠的解决方式:
方法1:利用宿主机Shell处理重定向
通过-i参数保持容器的标准输入打开,让宿主机直接把本地脚本内容传入容器内的cockroach sql命令:
docker exec -i node1 cockroach sql --insecure < "${PWD}/sql/init.sql"
这种方式的好处是不需要依赖容器内的挂载路径,直接使用宿主机上的脚本文件路径即可。
方法2:让容器内的Shell解析完整命令
通过调用容器内的bash来执行包含重定向的完整命令,这样容器内的Shell会正确处理<操作,读取你挂载到容器里的脚本文件:
docker exec node1 bash -c "cockroach sql --insecure < /cockroach/sql/init.sql"
执行完任意一种方法后,你可以通过以下命令进入容器的SQL交互界面,验证脚本是否执行成功:
docker exec -it node1 cockroach sql --insecure
比如查询脚本中创建的表,确认数据或结构是否符合预期。
内容的提问来源于stack exchange,提问作者sargas
相关产品推荐
相关产品推荐

