'Docker-compose doesn't persist volumes

I'm having a problem persisting data with docker-compose.

I want my service chatmysql to persist data I put inside a database, but everytime i run docker-compose down it all vanishes.

I checked directory /var/lib/docker/volumes to see if it stores data there when containers are running and the volume was completely empty.

I didn't have that issue when I was running containers with docker run command so I guess its fault of my docker-compose.yaml file. Can someone help me?

I'm running this on Ubuntu 20.04.

version: '3'

services:
  chatmysql:
    image: mysql/mysql-server
    container_name: chatmysql
    hostname: db
    user: root
    networks:
      - chatnet
    ports:
      - 3307:3306
    volumes:
      - chatmysqlvolume:/lib/var/mysql
  chatbackend:
    depends_on: 
      - chatmysql
    build:
      context: backend/src
    container_name: chatbackend
    hostname: backend
    networks:
      - chatnet
    ports:
      - 8080:8080
    environment:
      - MYSQLUSERNAME=${MYSQLUSERNAME:-user}
      - MYSQLPASSWORD=${MYSQLPASSWORD:?database password not set}
      - MYSQLHOST=${MYSQLHOST:-db}
      - MYSQLPORT=${MYSQLPORT:-3306}
      - MYSQLDBNAME=${MYSQLDBNAME:-test}
    restart: always
    deploy:
      restart_policy:
        condition: on-failure
  chatfrontend:
    build: frontend
    container_name: chatfrontend
    hostname: front
    networks:
      - chatnet
    ports:
      - 3000:3000

volumes:
  chatmysqlvolume:

networks:
  chatnet:
    driver: bridge


Solution 1:[1]

You need to change the mounted volume, try this :

version: '3.7'

services:
  chatmysql:
    image: mysql/mysql-server
    container_name: chatmysql
    hostname: db
    user: root
    networks:
      - chatnet
    ports:
      - 3307:3306
    volumes:
      - chatmysqlvolume:/var/lib/mysql
  chatbackend:
    depends_on: 
      - chatmysql
    build:
      context: backend/src
    container_name: chatbackend
    hostname: backend
    networks:
      - chatnet
    ports:
      - 8080:8080
    environment:
      - MYSQLUSERNAME=${MYSQLUSERNAME:-user}
      - MYSQLPASSWORD=${MYSQLPASSWORD:?database password not set}
      - MYSQLHOST=${MYSQLHOST:-db}
      - MYSQLPORT=${MYSQLPORT:-3306}
      - MYSQLDBNAME=${MYSQLDBNAME:-test}
    restart: always
    deploy:
      restart_policy:
        condition: on-failure
  chatfrontend:
    build: frontend
    container_name: chatfrontend
    hostname: front
    networks:
      - chatnet
    ports:
      - 3000:3000

volumes:
  chatmysqlvolume:

networks:
  chatnet:
    driver: bridge

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 Zeitounator