将本地CQL命令文件传递给Cassandra Docker容器

是否有可能将CQL命令的本地文件传递给Cassandra Docker容器?

使用docker exec失败,因为它找不到本地文件:

 me@meanwhileinhell:~$ ls -al -rw-r--r-- 1 me me 1672 Sep 28 11:02 createTables.cql me@meanwhileinhell:~$ docker exec -i cassandra_1 cqlsh -f createTables.cql Can't open 'createTables.cql': [Errno 2] No such file or directory: 'createTables.cql' 

我真的不想打开一个bash会话,并以这种方式运行脚本。

容器需要先能够访问脚本,然后才能执行它(即脚本文件需要位于容器内)。 如果这只是脚本的快速一次运行,最简单的方法就是使用docker cp命令将脚本从主机复制到容器中:

 $ docker cp createTables.cql container_name:/path/in/container 

然后,您应该能够使用docker exec来运行脚本,将其复制到容器内的任何path。 如果这是一个正在进行的工作,而且您可能正在更改并重新运行脚本,那么在容器中安装一个包含主机脚本的目录可能会更好。 为此,您可能需要docker run-v选项。

希望有所帮助!

如果您希望docker容器在主机系统中查看文件,唯一的方法就是映射卷。 您可以将当前目录映射到/ tmp并再次运行命令docker exec -i cassandra_1 cqlsh -f /tmp/createTables.cql