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:8Docker 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.