2015-10-12 15 views
5

Mit dem offiziellen MySQL Docker-Image, ich verstehe nicht, wie Sie das Datenverzeichnis an einem bestimmten Punkt auf dem Host mounten. The Dockerfile des Bildes setztMySQL Image ignoriert Volumenkonfiguration von docker-compose.yml

VOLUME /var/lib/mysql 

so sollten Datenbankdaten „irgendwo“ auf dem Host gespeichert werden. Ich möchte präziser in meiner Docker-compose Datei sein, also versuchte ich folgendes:

mysql: 
    image: mysql:5.7 
    environment: 
    - MYSQL_ROOT_PASSWORD=password 
    - MYSQL_DATABASE=mydb 
    volumes: 
    - ./database/mysql:/var/lib/mysql 

Beginnend mit docker-compose up alles funktioniert gut, aber das ./database/mysql Verzeichnis auf dem Host leer bleibt, während/var/lib/mysql im Container enthält Daten. Gibt es ein Problem in meiner Konfiguration? Oder verstehe ich nicht, wie man Volumes benutzt?

Antwort

9

docker-compose wird immer versuchen, Datenvolumen zu bewahren, so dass Sie keine Daten in ihnen verlieren. Wenn Sie mit einem Daten-Volume gestartet und dann zu einem Host-Volume gewechselt haben, erhalten Sie möglicherweise noch das Daten-Volume.

Um dies zu korrigieren, führen Sie docker-compose stop && docker-compose rm -f aus, wodurch Ihre Container und Ihre Datenvolumes gelöscht werden (dadurch werden alle Daten in Ihren Datenvolumes gelöscht). Auf der nächsten docker-compose up sollten Sie es mit dem Host-Volume sehen.

Bearbeiten: Ab Compose 1.6 können Sie anstelle der beiden obigen Befehle docker-compose stop -v ausführen.

+0

Sie haben Recht, das ist der Punkt. Danke für die Lösung + Erklärung! –

+0

Danke! Rette meinen Tag! –