Arjun Parmar
Arjun Parmar

Reputation: 1

Docker volumes not persisting data between container restarts in Docker Compose

I'm encountering an issue with Docker volumes not persisting data between container restarts when using Docker Compose. Here's a breakdown of my setup and the problem I'm facing:

Docker Compose Configuration:

version: '3.7'

services:
  solrcloud1:
    image: solr:8.11.2
    container_name: solrcloud1
    ports:
      - "8981:8983"
    environment:
      - ZK_HOST=zk:2181
    networks:
      - solr
    depends_on:
      - zk
    volumes:
      - solrcloud1_data:/var/solr

  solrcloud2:
    image: solr:8.11.2
    container_name: solrcloud2
    ports:
      - "8982:8983"
    environment:
      - ZK_HOST=zk:2181
    networks:
      - solr
    depends_on:
      - zk
    volumes:
      - solrcloud2_data:/var/solr

  solrcloud3:
    image: solr:8.11.2
    container_name: solrcloud3
    ports:
      - "8983:8983"
    environment:
      - ZK_HOST=zk:2181
    networks:
      - solr
    depends_on:
      - zk
    volumes:
      - solrcloud3_data:/var/solr

  zk:
    image: zookeeper:3.6.2
    container_name: zk
    restart: always
    hostname: zk
    ports:
      - 2181:2181
      - 7001:7000
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=zk:2888:3888;2181
      ZOO_4LW_COMMANDS_WHITELIST: mntr, conf, ruok
      ZOO_CFG_EXTRA: "metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider metricsProvider.httpPort=7000 metricsProvider.exportJvmInfo=true"
    networks:
      - solr
    volumes:
      - zk_data:/data

networks:
  solr:

volumes:
  solrcloud1_data:
    external: false
  solrcloud2_data:
    external: false
  solrcloud3_data:
    external: false
  zk_data:
    external: false

I confirmed that the volumes are creating:

$ docker volume ls
DRIVER    VOLUME NAME
local     1zk_3sc_solrcloud1_data
local     1zk_3sc_solrcloud2_data
local     1zk_3sc_solrcloud3_data
local     1zk_3sc_zk_data
local     8a1dadc9debf247e3b5b11d64367438806ac839e9bf99566916a473110782f80
local     15e8ec0fb6052d0458d9f1bba9812326a0eccfe844d75cb7fbf0019ab1cc03f1
local     a242b48bedc509504825dcf9ec5d300692282a80cb87bbb0f694c67c2ad969f2
local     b8183473dd64a163dc91c6eb9d878675344b6655fd766837fe92e1c1f1381060

Issue:

  1. I've defined volumes for each Solr container to persist data using the solrcloud1_data, solrcloud2_data, and solrcloud3_data named volumes.
  2. After creating collections and indexing data, I stop and remove all containers using docker-compose down.
  3. When I restart the containers with docker-compose up, the collections, indexed data, and cores are not preserved, and it seems like the volumes are not mounted correctly.
  4. I've verified that the named volumes exist using docker volume ls, and they appear in the list.

What could be causing this issue, and how can I ensure that my Docker volumes correctly persist data between container restarts?

Any insights or suggestions would be greatly appreciated. Thank you in advance!

Upvotes: 0

Views: 416

Answers (1)

Amy
Amy

Reputation: 1

By using external: false in your docker-compose file, it's telling docker-compose to manage those volumes so that when the container using the volumes is stopped (docker-compose down), the volume is removed. If you want the volumes and data to persist, you need to use external: true and create the volumes using docker volume create.

Re-using existing volume with docker compose

Upvotes: 0

Related Questions