使用带有安装到符号链接的Docker-Volume,但是它也将数据持久存储到主机。为什么?

问题描述 投票:1回答:1

我这样创建了一个Docker卷:

sudo docker volume create --driver=local --name=es-data1 --opt type=none --opt o=bind --opt device=/usr/local/contoso/data1/elasticsearch/data1
  • /usr/local/contoso/data1/elasticsearch/data1是一个符号链接。

而且我在docker-compose.yml文件中实例化了三个Elasticsearch Docker容器,如下所示:

version: '3.7'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.0
    logging:
      driver: none
    container_name: elasticsearch1
    environment:
      - node.name=elasticsearch1
      - cluster.name=docker-cluster
      - cluster.initial_master_nodes=elasticsearch1
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms1G -Xmx1G"
      - http.cors.enabled=true
      - http.cors.allow-origin=*
      - network.host=_eth0_          
    ulimits:
      nproc: 65535
      memlock:
        soft: -1
        hard: -1
    cap_add:
      - ALL
    # privileged: true
    deploy:
      replicas: 1
      update_config:
        parallelism: 1
        delay: 10s
      resources:
        limits:
          cpus: '1'
          memory: 1G
        reservations:
          cpus: '1'
          memory: 1G
      restart_policy:
        condition: unless-stopped
        delay: 5s
        max_attempts: 3
        window: 10s
    volumes:
      - es-logs:/var/log
      - es-data1:/usr/share/elasticsearch/data
    networks:
      - elastic
      - ingress
    ports:
      - 9200:9200
      - 9300:9300
    healthcheck:
      test: wget -q -O - http://127.0.0.1:9200/_cat/health
  elasticsearch2:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.0
    logging:
      driver: none
    container_name: elasticsearch2
    environment:
      - node.name=elasticsearch2
      - cluster.name=docker-cluster
      - cluster.initial_master_nodes=elasticsearch1
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms1G -Xmx1G"
      - "discovery.zen.ping.unicast.hosts=elasticsearch1"
      - http.cors.enabled=true
      - http.cors.allow-origin=*
      - network.host=_eth0_          
    ulimits:
      nproc: 65535
      memlock:
        soft: -1
        hard: -1
    cap_add:
      - ALL
    # privileged: true
    deploy:
      replicas: 1
      update_config:
        parallelism: 1
        delay: 10s
      resources:
        limits:
          cpus: '1'
          memory: 1G
        reservations:
          cpus: '1'
          memory: 1G
      restart_policy:
        condition: unless-stopped
        delay: 5s
        max_attempts: 3
        window: 10s
    volumes:
      - es-logs:/var/log
      - es-data2:/usr/share/elasticsearch/data
    networks:
      - elastic
      - ingress
    ports:
      - 9201:9200
    healthcheck:
      test: wget -q -O - http://127.0.0.1:9200/_cat/health
  elasticsearch3:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.0
    logging:
      driver: none
    container_name: elasticsearch3
    environment:
      - node.name=elasticsearch3
      - cluster.name=docker-cluster
      - cluster.initial_master_nodes=elasticsearch1
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms1G -Xmx1G"
      - "discovery.zen.ping.unicast.hosts=elasticsearch1"
      - http.cors.enabled=true
      - http.cors.allow-origin=*
      - network.host=_eth0_          
    ulimits:
      nproc: 65535
      memlock:
        soft: -1
        hard: -1
    cap_add:
      - ALL
    # privileged: true
    deploy:
      replicas: 1
      update_config:
        parallelism: 1
        delay: 10s
      resources:
        limits:
          cpus: '1'
          memory: 1G
        reservations:
          cpus: '1'
          memory: 1G
      restart_policy:
        condition: unless-stopped
        delay: 5s
        max_attempts: 3
        window: 10s
    volumes:
      - es-logs:/var/log
      - es-data3:/usr/share/elasticsearch/data
    networks:
      - elastic
      - ingress
    ports:
      - 9202:9200
    healthcheck:
      test: wget -q -O - http://127.0.0.1:9200/_cat/health
volumes:
  es-data1:
    driver: local
    external: true
  es-data2:
    driver: local
    external: true
  es-data3:
    driver: local
    external: true
  es-logs:
    driver: local
    external: true     
networks:
  elastic:
    external: true
  ingress:
    external: true

我的问题:

  • Elasticsearch容器将索引数据持久存储到both主机文件系统和已安装的符号链接。

我的问题:

  • 我如何修改我的配置,以使Elasticsearch容器only将索引数据持久保存到已安装的符号链接上?
docker-compose symlink mount docker-volume elasticsearch-7
1个回答
1
投票

local卷驱动程序的默认行为是,这些文件另外存储在主机上。您可以在docker-compose.yml中更改音量设置,以防止docker在主机文件系统上持久化(复制)文件(请参见nocopy: true),如下所示:

version: '3.7'
services:
  elasticsearch:
    ....
    volumes:
      - type: volume
        source: es-data1
        target: /usr/share/elasticsearch/data
        volume:
          nocopy: true
    ....
volumes:
  es-data1:
    driver: local
    external: true

您可能还想在这里检查此问题:Docker-compose - volumes driver local meaning。因此,似乎有些docker volume插件是出于可移植性的原因而专门制造的。例如flockerhedvig。但是我没有为此目的使用插件,所以我还不能真正推荐一个插件。

© www.soinside.com 2019 - 2024. All rights reserved.