我想curl
在 Docker 容器内使用 bash 脚本执行。
script.sh
这是我添加到容器中的脚本文件:
curl -X POST http://localhost:9200/tests/test -d usr/share/elasticsearch/data/test.json
json文件的内容如下(添加的想法\
来自此主题):
"{\"id\":\"978-1-60741-503-9\",\"doi\":\"\"}"
当我进入正在运行的 Docker 容器并执行时bash myscript.sh
,结果是:
{“error”:{“root_cause”:[{“type”:“mapper_parsing_exception”,“reason”:“无法解析”}],“type”:“mapper_parsing_exception”,“reason”:“无法解析”,“caused_by”:{“type”:“not_x_content_exception”,“reason”:“只能对某些 xcontent 字节或压缩的 xcontent 字节调用压缩器检测”}}
但是,如果我将脚本更改为以下内容:
curl -X POST http://localhost:9200/tests/test -d "{\"id\":\"978-1-60741-503-9\",\"doi\":\"\"}"
然后它就可以正常工作了。
那么,为什么它不喜欢 json 文件呢???
更新:
当我按照评论中的建议添加时@
,usr/
出现以下错误:
警告:无法从文件警告中读取数据:“usr/share/elasticsearch/data/test.json”,这将导致空警告:POST。%总计%已接收%Xferd平均速度时间时间
时间当前Dload上传总花费剩余速度100 201 100 201 0 0 740 0 --:--:-- --:--:-- --:--:-- 738 {“error”:{“root_cause”:[{“type”:“mapper_parsing_exception”,“reason”:“无法解析,文档为空”}],“type”:“mapper_parsing_exception”,“reason”:“无法解析,文档为空”},“status”:400}
文件test.json
:
"{\"id\":\"123\",\"field\":\"456\"}"
答案1
json
作为参数传递的文件前面应该curl -d
带有@
符号。
curl -X POST http://localhost:9200/tests/test -d @usr/share/elasticsearch/data/test.json