如何将 FSCrawler REST 与 docker-compose 连接起来

Posted

技术标签:

【中文标题】如何将 FSCrawler REST 与 docker-compose 连接起来【英文标题】:How to connect FSCrawler REST with docker-compose 【发布时间】:2020-11-09 11:07:03 【问题描述】:

我已使用 FSCrawler 成功为 pdf 建立索引,但我无法连接到 FSCrawler 的 REST 客户端以创建到 elasticsearch 的管道。这是我在 docker-compose 中的命令:

command: fscrawler fscrawler_rest

我可以使用我的 FSCrawler 作业名称的索引来查询 elasticsearch 并检索结果。然后,当我将 --rest 标志添加到我的 docker-compose 命令时,我成功启动了 REST 客户端(尽管有一个我不明白的警告):

WARN  [o.g.j.i.i.Providers] A provider fr.pilato.elasticsearch.crawler.fs.rest.UploadApi registered in SERVER runtime does not implement any provider interfaces applicable in the SERVER runtime. 
      Due to constraint configuration problems the provider fr.pilato.elasticsearch.crawler.fs.rest.UploadApi will be ignored.
INFO  [f.p.e.c.f.r.RestServer] FS crawler Rest service started on [http://127.0.0.1:8080/fscrawler]

然后当我尝试curl 带有或不带有斜杠时:curl -XGET "127.0.0.1:8080/fscrawler/" 我得到curl: (7) Failed to connect to 127.0.0.1 port 8080: Connection refused

新的 docker-compose 命令供参考:

command: fscrawler fscrawler_rest --loop 0 --rest debug

我似乎无法很好地调试它,因为 docker-compose 在容器运行时不允许使用 CLI 命令,但我不明白为什么我仍然可以使用 http://localhost:9200/fscrawler_rest 在 elasticsearch 中达到我的工作索引。

FSCrawler 正在使用 elasticsearch,但 REST 服务似乎无法正常工作。有没有人成功使用 FSCrawler REST API?

编辑:

version: '3.6'

services:
  postgres:
    image: "postgres:12.1"
    env_file:
      - '.env'
    ports:
      - '127.0.0.1:5432:5432'
    restart: "$DOCKER_RESTART_POLICY:-unless-stopped"
    stop_grace_period: "$DOCKER_STOP_GRACE_PERIOD:-3s"
    volumes:
      - postgres:/var/lib/postgresql/data
    networks: 
      - esnet

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.8.0
    # build: ./es
    container_name: elasticsearch
    env_file:
      - ".env"
    depends_on:
      - "postgres"
    volumes:
      - esdata:/usr/share/elasticsearch/data
    environment:
      - node.name=elasticsearch
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.type=single-node
      - network.host=0.0.0.0
      - network.publish_host=0.0.0.0
      - http.cors.enabled=true
      - http.cors.allow-origin=*
      - http.host=0.0.0.0
      - transport.host=0.0.0.0
    ulimits:
      memlock:
        soft: -1
        hard: -1
    ports:
      - 9200:9200
      - 9300:9300
    networks:
      - esnet

  fscrawler:
    # I have taken this docker image and updated to 2.7 snapshot: toto1310/fscrawler
    build:
      context: $PWD
      dockerfile: Dockerfile-toto
    container_name: fscrawler
    depends_on:
      - elasticsearch
    restart: always
    volumes:
      - $PWD/config:/root/.fscrawler
      - $PWD/data:/tmp/es
    networks: 
      - esnet
    environment:
      - FS_URL=/tmp/es
      - ELASTICSEARCH_URL=http://elasticsearch:9200
      - ELASTICSEARCH_INDEX=fscrawler_rest
    command: fscrawler fscrawler_rest --loop 0 --rest debug

volumes:
  postgres:
  esdata:
    driver: local

networks:
  esnet:

【问题讨论】:

能否请您出示 docker-compose 文件? WARN 消息对我来说很奇怪。你能在 FSCrawler 项目中打开一个问题吗?还有完整的细节,比如 docker-compose 文件。 另外,你能在没有 docker-compose 的情况下运行它吗?所以我们可以检查问题的根源是在 FSCrawler 还是其他地方。 @dadoonet 我打开了一个问题github.com/dadoonet/fscrawler/issues/984。如果我们可以让它与 compose 一起使用,我很乐意相应地更新文档,因为它们目前对于 docker 来说非常稀少。 我认为您需要将端口添加到fscrawler 容器 【参考方案1】:

为 fscrawler 添加端口

ports:
  - 8080:8080

除非您更改settings.yaml rest url,否则会给出空响应:

rest:
  url: “http://fscrawler:8080”

到达名为fscrawler的docker容器。

【讨论】:

以上是关于如何将 FSCrawler REST 与 docker-compose 连接起来的主要内容,如果未能解决你的问题,请参考以下文章

将文档上传到 FSCrawler 以在 Elasticsearch 中建立索引的正确方法

是否可以使用 FSCrawler 将文件内容插入 Elasticsearch 中现有索引的特定 _id

Elasticsearch:使用 Docker 来安装 FSCrawler 并摄入 Word 及 PDF 文件

FSCrawler 找不到现有的工作

Windows _settings.yml、文件夹/目录和驱动器上的 FSCrawler

FSCrawler 爬取 E:\TestFilesToBeIndexed\subfolder 时出错:java.net.ConnectException:连接超时:连接