O arquivo json
passado como argumento para curl -d
deve ser precedido pelo símbolo @
.
curl -X POST http://localhost:9200/tests/test -d @usr/share/elasticsearch/data/test.json
Eu quero executar curl
usando o script bash dentro do contêiner do Docker.
Este é o meu arquivo de script script.sh
que adicionei ao contêiner:
curl -X POST http://localhost:9200/tests/test -d usr/share/elasticsearch/data/test.json
O conteúdo do arquivo json é o seguinte (a idéia de adicionar \
vem de este tópico ):
"{\"id\":\"978-1-60741-503-9\",\"doi\":\"\"}"
Quando eu entro no contêiner Docker em execução e faço bash myscript.sh
, o resultado é:
{"error":{"root_cause":[{"type":"mapper_parsing_exception","reason":"failed to parse"}],"type":"mapper_parsing_exception","reason":"failed to parse","caused_by":{"type":"not_x_content_exception","reason":"Compressor detection can only be called on some xcontent bytes or compressed xcontent bytes"}}
No entanto, se eu alterar o script para este:
curl -X POST http://localhost:9200/tests/test -d "{\"id\":\"978-1-60741-503-9\",\"doi\":\"\"}"
então funciona sem erros.
Então, por que ele não gosta do arquivo json?
ATUALIZAÇÃO:
Quando adiciono @
atrás de usr/
, como sugerido nos comentários, recebo o seguinte erro:
Warning: Couldn't read data from file Warning: "usr/share/elasticsearch/data/test.json", this makes an empty Warning: POST. % Total % Received % Xferd Average Speed Time
Time Time Current Dload Upload Total Spent Left Speed 100 201 100 201 0 0 740 0 --:--:-- --:--:-- --:--:-- 738 {"error":{"root_cause":[{"type":"mapper_parsing_exception","reason":"failed to parse, document is empty"}],"type":"mapper_parsing_exception","reason":"failed to parse, document is empty"},"status":400}
O arquivo test.json
:
"{\"id\":\"123\",\"field\":\"456\"}"
O arquivo json
passado como argumento para curl -d
deve ser precedido pelo símbolo @
.
curl -X POST http://localhost:9200/tests/test -d @usr/share/elasticsearch/data/test.json