我用cURL命令导出了Kibana仪表板:
curl -XGET localhost:5601/api/kibana/dashboards/export?dashboard=[uuid] > my-dashboards.json
现在我想使用docker-compose
导入此仪表板,但是我收到此错误:
test.kibana | Warning: Couldn't read data from file "my-dashboards.json", this makes an
test.kibana | Warning: empty POST.
test.kibana | % Total % Received % Xferd Average Speed Time Time Time Current
test.kibana | Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0curl: (7) Failed connect to 0.0.0.0:5601; Connection refused
这是docker-compose文件:
version: '2'
services:
elasticsearch-docker:
image: docker.elastic.co/elasticsearch/elasticsearch:5.6.3
container_name: test.elastic
ports:
- 9200:9200
- 9300:9300
volumes:
- ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
environment:
- discovery.type=single-node
- xpack.security.enabled=false
kibana:
image: docker.elastic.co/kibana/kibana:5.6.3
container_name: test.kibana
command: curl -XPOST test.elastic:5601/api/kibana/dashboards/import -H 'kbn-xsrf:true' -H 'Content-type:application/json' -d @my-dashboards.json
ports:
- 5601:5601
depends_on:
- elasticsearch-docker
volumes:
- ./kibana.yml:/usr/share/kibana/config/kibana.yml
- ./my-dashboards.json:/usr/share/kibana/config/my-dashboards.json
正在执行的curl命令在容器的工作目录中找不到my-dashboards.json
。您可以通过在compose文件中设置/usr/share/kibana/config
属性来转到路径working_dir
:
...
kibana:
image: docker.elastic.co/kibana/kibana:5.6.3
container_name: test.kibana
working_dir: /usr/share/kibana/config
...
一旦Elasticsearch和Kibana都启动了,就在主机上,在具有JSON转储的目录中运行curl
命令。
以编程方式告知两者都已启动是非常棘手的。原则上,您可以通过编写ENTRYPOINT脚本来执行此类操作,该脚本在启动实际服务之前进行首次设置,但如果配置位于文件系统中则更容易(IIRC Kibana实际上将此类数据存储在ES中)。如果你仔细阅读,请说官方的mysql图像执行此操作,它涉及启动服务,等待它实际出现,进行初始化,然后在exec "$@"
之前再次停止它。
你不能通过Docker Compose做任何事情,如果你的第一次设置依赖于主机本地文件和实际运行的服务,那么可能更容易不尝试使用它。