如何使用docker-compose持久保存nifi流文件?

时间:2019-03-24 16:32:04

标签: docker-compose apache-nifi

现在我正在使用nifi及其处理器来处理一些流媒体内容(mqtt侦听器,json评估,文本替换,写入db ...)。 我试图持久化流文件,因此进行了一些卷映射(请参见下文)。 但这是行不通的。重新启动容器后,似乎没有保存流文件...

有人可以给我提示如何解决这个问题吗?

nifi:
image: apache/nifi
restart: on-failure
ports:
  - "8000:8000"
networks:
  - traefik
environment:
  - NIFI_WEB_HTTP_PORT=8000
volumes:
  - nifi_conf:/opt/nifi/conf
  - nifi_state:/data/nifi/state
  - nifi_db:/opt/nifi/database_repository
  - nifi_flowfile:/opt/nifi/flowfile_repository
  - nifi_content:/opt/nifi/content_repository
  - nifi_provenance:/opt/nifi/provenance_repository 


volumes:
 nifi_provenance:{}
 nifi_flowfile: {}
 nifi_content: {}
 nifi_db: {}
 nifi_state: {}
 nifi_conf: {}

谢谢。

5 个答案:

答案 0 :(得分:2)

您可以这样将docker容器文件夹直接映射到主机:

services:
  nifi:
    ...
    volumes:
      - ./conf:/opt/conf
      - ./nifi_state:/data/nifi/state
      ...

不需要其他卷定义

请注意,在带有virtualbox的Windows中,此功能仅在当前用户目录中有效。

答案 1 :(得分:2)

我这边的一个更新。 1.8.0之后,Apache Nifi更改了目录。因此,您应该使用以下代码:

volumes:
      - ./nifi_state:/opt/nifi/nifi-current/state
      - ./nifi_db:/opt/nifi/nifi-current/database_repository
      - ./nifi_flowfile:/opt/nifi/nifi-current/flowfile_repository
      - ./nifi_content:/opt/nifi/nifi-current/content_repository
      - ./nifi_provenance:/opt/nifi/nifi-current/provenance_repository   

答案 2 :(得分:1)

最终编辑: 经过多次测试和试验,我发现使用docker swarm可以持久存储Nifi的唯一方法是:

第1步:创建nifi_data卷

$ docker volume create nifi_data

第2步:使用以下配置启动堆栈

version: "3.7"
services:
  nifi:
    image: apache/nifi:1.9.2
    ports:
      - target: 8080
        published: 9090
        protocol: tcp
        mode: host
    environment:
      - NIFI_WEB_HTTP_HOST=0.0.0.0
      #- NIFI_HOME=/home/nifi
      #- NIFI_LOG_DIR=/home/nifi/logs

    volumes:
      - nifi_data:/home/nifi

volumes:
  nifi_data:
    external: true

第3步:输入容器

$ docker exec -it <container_id> bash

第4步:将当前副本复制到家里

$ cd /opt/nifi/nifi-current
$ cp -r ./* /home/nifi

第5步:删除已部署的堆栈

docker stack rm nifi

第6步:使用以下配置部署堆栈(只需删除#)

version: "3.7"
services:
  nifi:
    image: apache/nifi:1.9.2
    ports:
      - target: 8080
        published: 9090
        protocol: tcp
        mode: host
    environment:
      - NIFI_WEB_HTTP_HOST=0.0.0.0
      - NIFI_HOME=/home/nifi
      - NIFI_LOG_DIR=/home/nifi/logs

    volumes:
      - nifi_data:/home/nifi

volumes:
  nifi_data:
    external: true

答案 3 :(得分:0)

或者,您只能使用docker-compose stop而不是docker-compose down,这不会删除您的容器,因此不会挂载卷。

这意味着您不必执行任何卷映射,而可以使用此基本的docker-compose文件:

version: '2'
services:
  futa-nifi-lsc:
    environment:
      - NIFI_WEB_HTTP_PORT=9000
    image: apache/nifi:1.8.0
    volumes:
      - ./jdbc_driver:/opt/jdbc_driver
      - ./checkin_files:/opt/checkin_files
      - ./truststore:/opt/truststore
    ports:
      - "9000:9000"

有关更多信息,请阅读本文here

答案 4 :(得分:0)

visit(Returner &)