如何使用docker-compose文件导入Kibana仪表板?

时间:2018-09-08 09:01:40

标签: docker curl docker-compose kibana

我使用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

2 个答案:

答案 0 :(得分:0)

正在执行的curl命令在容器的工作目录中找不到my-dashboards.json。您可以这样设置路径/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
 ...

答案 1 :(得分:0)

Elasticsearch和Kibana都启动后,请从主机在具有JSON转储的目录中运行该curl命令。

以编程方式告诉他们两者都已经启动非常棘手。原则上,您可以通过编写一个ENTRYPOINT脚本来执行类似的操作,该脚本在启动实际服务之前会进行首次设置,但是如果配置位于文件系统中,则操作会更容易(IIRC Kibana实际上将此类数据存储在ES中)。如果您仔细阅读,说官方的mysql映像是这样做的,则它涉及启动服务,等待它真正启动,进行初始化,然后在服务器中的exec "$@"之前再次停止它。结束。

您无法通过Docker Compose进行所有操作,并且,如果您的首次设置同时依赖于本地主机文件和实际运行的服务,那么尝试不穿鞋可能会更容易-把它塞进去。