在 Docker 中将 EBS 挂载到 ELK

Mount EBS to ELK in Docker

我在 Docker 中遇到一些问题,它安装在 AWS 的 EC2 节点上。

我已经使用 docker-compose 在 docker 中安装了 ELK,现在可以使用 tcp 过滤器 (winston3-npm) 查看日志。我还在这个 EC2 实例中附加了一个 EBS 卷,现在我想将日志保留在这个 EBS 中,这样即使我终止了我的 EC2 实例并使用这个 EBS 卷生成一个新实例,我也想看到所有旧日志。

所以,我无法将 EBS 卷挂载到 docker 以便保留我的所有数据。 下面是我的 docker-compose 文件 .

谁能帮我解决这个问题?

version: '3.2'

services:
  elasticsearch:
    build:
      context: elasticsearch/
      args:
        ELK_VERSION: $ELK_VERSION
    volumes:
      - type: bind
        source: ./elasticsearch/config/elasticsearch.yml
        target: /usr/share/elasticsearch/config/elasticsearch.yml
        read_only: true
    volumes:
      - type: bind
        source: ./elasticsearch/config/elasticsearch.yml
        target: /usr/share/elasticsearch/config/elasticsearch.yml
        read_only: true
      - /data:/usr/share/elasticsearch/data/:rw


      #- type: volume
        #source: elasticsearch
        #target: /usr/share/elasticsearch/data
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      ES_JAVA_OPTS: "-Xmx256m -Xms256m"
      ELASTIC_PASSWORD: changeme
    networks:
      - elk

  logstash:
    build:
      context: logstash/
      args:
        ELK_VERSION: $ELK_VERSION
    volumes:
      - type: bind
        source: ./logstash/config/logstash.yml
        target: /usr/share/logstash/config/logstash.yml
        read_only: true
      - type: bind
        source: ./logstash/pipeline
        target: /usr/share/logstash/pipeline
        read_only: true
    ports:
      - "5000:5000"
      - "9600:9600"
    environment:
      LS_JAVA_OPTS: "-Xmx256m -Xms256m"
    networks:
      - elk
    depends_on:
      - elasticsearch

  kibana:
    build:
      context: kibana/
      args:
        ELK_VERSION: $ELK_VERSION
    volumes:
      - type: bind
        source: ./kibana/config/kibana.yml
        target: /usr/share/kibana/config/kibana.yml
        read_only: true
    ports:
      - "5601:5601"
    networks:
      - elk
    depends_on:
      - elasticsearch

networks:
  elk:
    driver: bridge

volumes:
  elasticsearch:

EBS 已附加到您的 EC2 实例,无法直接将 EBS 卷挂载到 EC2 实例上的 docker 容器 运行 中。

您可以在 EC2 实例上安装 EBS 卷并将 docker 持久性存储指向该安装点

我能够解决问题...在 /lib/systemd/system/ 中存在的 docker.service 文件中提到了 EBS 挂载目录路径,并且能够看到所有 docker ebs中的相应数据。

谢谢大家的帮助。