Console9

How to persist MySQL data with Docker volumes

Store MySQL database files outside the container lifecycle using Docker named volumes to prevent data loss.

Store MySQLdatabase files in a Docker named volume so data survives container removal, updates, and recreation.

Step-by-Step: Persist MySQL Data with Docker Volumes

1. Create a Named Volume and Run MySQL

docker run -d   --name mysql-server   -e MYSQL_ROOT_PASSWORD=secret   -v mysql-data:/var/lib/mysql   -p 3306:3306   mysql:8

Docker creates a named volume mysql-data that persists the MySQL data directory. Removing the container ( docker rm mysql-server) does not delete the volume.

2. Use Docker Compose with a Named Volume

services:
  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - mysql-data:/var/lib/mysql
    ports:
      - "3306:3306"

volumes:
  mysql-data:

3. Verify Data Persists Across Container Recreation

docker compose down
docker compose up -d
mysql -h 127.0.0.1 -u root -p -e "SHOW DATABASES;"

The databases created before docker compose down still exist because the named volume retains the data.

Common Issues

Data disappears after docker compose down -v— The -v flag removes named volumes. Use docker compose down without -v to preserve data.