Windows 11下Docker部署Cassandra 4.1导入外部CSV失败求助
核心原因
Docker容器的文件系统与本地Windows系统完全隔离,容器无法直接访问本地磁盘文件;同理,容器内生成的文件仅存于容器内部,未挂载本地目录时本地无法查看。
具体解决步骤
1. 重置容器(若已启动无挂载的Cassandra)
先停止并删除现有容器,后续重新创建带目录挂载的实例:
# 替换为你的容器名或ID docker stop cassandra-container docker rm cassandra-container
2. 创建共享目录并启动带挂载的Cassandra容器
在Windows本地创建共享目录,比如D:\USM\Data Science\CDS 502 Big data storage and management\Assignment\Project\cassandra_shared,然后执行以下命令启动容器,将本地目录挂载到容器内的/shared路径:
docker run -d --name cassandra-container \ -p 9042:9042 \ -v D:/USM/Data Science/CDS 502 Big data storage and management/Assignment/Project/cassandra_shared:/shared \ cassandra:4.1
注意:Windows路径在Docker命令中需将反斜杠
\替换为正斜杠/,或使用双反斜杠\\
3. 同步文件到共享目录
将本地的forest area by state.csv复制到刚才创建的cassandra_shared目录,此时容器内的/shared路径就能访问该文件。
4. 使用容器内路径执行导入命令
进入cqlsh后,用容器内的文件路径执行COPY:
COPY data (id) FROM '/shared/forest area by state.csv' WITH HEADER = TRUE;
5. 导出文件到本地的方法
如果要导出CSV到本地,直接指定容器内的/shared路径即可:
COPY data (id) TO '/shared/exported_data.csv' WITH HEADER = TRUE;
导出完成后,本地的cassandra_shared目录就能看到exported_data.csv文件。
临时替代方案(无需重置容器)
如果不想重新创建容器,可通过docker cp将本地文件复制到容器内部:
docker cp "D:\USM\Data Science\CDS 502 Big data storage and management\Assignment\Project\forest area by state.csv" cassandra-container:/tmp/
之后在cqlsh中使用/tmp/forest area by state.csv作为导入路径即可,但这种方式是一次性的,不如挂载目录持久方便。
额外提醒:确保Docker Desktop有权访问本地目录,可在Docker Desktop的
Settings > Resources > File Sharing中添加对应盘符或目录。
内容的提问来源于stack exchange,提问作者james kam

