'Docker: How to volume map data from host to container (mongo) in using docker-compose

I am trying to volume map, data from host to container using docker-compose. I found this docker-compose.yml from prisma docs

version: '3'
services:
  prisma:
    image: prismagraphql/prisma:1.34
    restart: always
    ports:
      - '4466:4466'
    environment:
      PRISMA_CONFIG: |
        port: 4466
        managementApiSecret: mysecret42
        databases:
          default:
            connector: mongo
            uri: mongodb://prisma:prisma@mongo
  mongo:
    image: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: prisma
      MONGO_INITDB_ROOT_PASSWORD: prisma
    ports:
      - '27017:27017'
    volumes:
      - mongo:/var/lib/mongo
volumes: 
  mongo:

Problem Description:

  1. docker-compose up -d,
  2. add some data to mongodb
  3. docker-compose down. the data gets removed.
  4. Now, if I again docker-compose up -d. I have to add data again to mongodb

How can I make data persistent (irrespective of container getting destroy)?



Solution 1:[1]

What you are describing is not the behavior of docker. There must be something in the prismagraph program that erases all the data every time it starts.

docker compose down requires a -v flag in order to remove named volumes.

https://docs.docker.com/compose/reference/down/

You can confirm this by doing:

docker volume ls

docker volume inspect mongo

Update: the location that mongo stores data is /var/lib/mongodb, not /var/lib/mongo

Change your docker-compose file and it should work.

  mongo:
    image: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: prisma
      MONGO_INITDB_ROOT_PASSWORD: prisma
    ports:
      - '27017:27017'
    volumes:
      - mongo:/var/lib/mongodb
volumes: 
  mongo:

Solution 2:[2]

Worked for me.

  mongo:
    image: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: prisma
      MONGO_INITDB_ROOT_PASSWORD: prisma
    volumes:
      - ./mongo/data:/data/db
  volumes:
    mongo:

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 chugadie
Solution 2 Antonio Tabares