Docker部署QuestDB报errno=2无法打开文件但文件实际存在
问题原因
- Docker容器与宿主机文件系统隔离:当前启动命令仅挂载了QuestDB自身的存储卷,未将宿主机存放CSV的
/home/user/d1_data目录映射到容器内部。容器内不存在/home/user/d1_data路径,无法访问宿主机上的对应文件,宿主机可读不代表容器内存在对应路径、可访问该文件。 - COPY导入安全配置无效:
cairo.sql.copy.root是QuestDB的导入路径白名单配置,作用是限定COPY命令可访问的文件根目录,配置为空时等于没有开放任何允许导入的文件路径,即使文件在容器内存在也会被拦截读取。 - 导入命令路径写法错误:COPY命令读取的是容器内的文件路径,直接填写宿主机绝对路径无法匹配容器内的文件位置。
修复步骤
- 强制删除现有异常容器:
docker rm -f docker_questdb
- 修改QuestDB的
server.conf配置,为cairo.sql.copy.root指定容器内的专用导入目录,示例:
cairo.sql.copy.root=/opt/questdb/import
- 重新启动容器,新增目录挂载参数,将宿主机存放CSV的本地目录映射到上一步配置的容器内导入路径:
docker run -p 9000:9000 \ --memory="100g" \ --name docker_questdb \ -v questdb:/root/.questdb \ -v /home/user/d1_data:/opt/questdb/import \ questdb/questdb
- 连接QuestDB执行导入命令,此时直接填写CSV文件名即可,系统会自动从配置的导入根目录查找文件:
COPY d1temp FROM 'd1.csv';
内容的提问来源于stack exchange,提问作者AbdelKh
相关产品推荐
相关产品推荐

