2017-05-30 4 views
0

Ich verwende ein natives Docker für Windows (auf Windows 10) für WordPress-Entwicklung. Ich habe zwei Container: WordPress und MySQL. Der MySQL-Container hat ein Datenvolumen, in dem DB-Daten zwischen Läufen gespeichert werden.Wie persistente MySQL-Container unter Windows 10 zwischen Neustarts

Ich starte Container mit 'Docker-komponieren -d' und höre mit 'Docker-komponieren' auf. Wenn Sie auf diese Weise gestoppt werden, werden MySQL-Daten ordnungsgemäß auf dem Daten-Volume gespeichert und wenn ich das nächste Mal starte, sehe ich, dass alle meine Änderungen bestehen bleiben.

Wenn ich jedoch Windows 10 neu starte, ohne zuerst die MySQL-Container zu stoppen, werden Änderungen, die seit dem letzten Start an der Datenbank vorgenommen wurden, nicht gespeichert. Docker für Windows ist intelligent genug, um die gleichen Volumes zu starten, die vor dem Neustart ausgeführt wurden, aber ist es wirklich nicht wichtig, sie ordnungsgemäß herunterzufahren, damit die DB-Daten gespeichert werden? Ist es wirklich so oder missverstehe ich irgendetwas?

Was ist der zuverlässigste Weg, Datenverluste beim Systemneustart zu vermeiden? Es ist eine langwierige Aufgabe, alle MySQL-Container vor dem Neustart manuell zu stoppen, besonders wenn mehrere Server laufen. Wahrscheinlich kann ich ein Skript erstellen, das die Ausgabe von "docker ps" analysiert und alle MySQL-Container vor dem Neustart stoppt, aber ich fürchte, dass ich hier wahrscheinlich ein Rad neu erfinde.

Was ist der beste Weg, um mit einer Situation umzugehen? Ich habe hoch und niedrig gesucht, aber nichts zu einem Thema gefunden. Bin ich der Einzige, der das braucht? Fehle ich hier etwas?

Jede Hilfe wirklich geschätzt! Vielen Dank!

P.S. Meine Docker-compose.yml Datei ist:

version: '2' 

services: 
    db: 
    image: mysql:5.7 
ports: 
    - "9013:3306" 
volumes: 
    - ./database:/var/lib/mysql 
restart: always 
environment: 
    MYSQL_ROOT_PASSWORD: somewordpress 
    MYSQL_DATABASE: wordpress 
    MYSQL_USER: wordpress 
    MYSQL_PASSWORD: wordpress 

    wordpress: 
depends_on: 
    - db 
image: wordpress:latest 
volumes: 
    - ./wordpress:/var/www/html 
ports: 
    - "8013:80" 
restart: always 
environment: 
    WORDPRESS_DB_HOST: db:3306 
    WORDPRESS_DB_USER: wordpress 
    WORDPRESS_DB_PASSWORD: wordpress 
    WORDPRESS_TABLE_PREFIX: wpd1_ 
+0

Können Sie Ihre 'docker-compose.yml' Datei anzeigen? –

+0

@ janshair-khan hinzugefügt, dass der Text auf meine Frage – Kirlat

Antwort

0

ich einige zusätzliche Untersuchung tat und ich denke, das Problem, das ich gefragt über existierte nie. Es war eigentlich ein Docker für Windows Problem einer anderen Art: https://github.com/docker/for-win/issues/584.

Hier ist was passiert ist. 1. Wenn der Computer neu gestartet wurde, wurden alle persistenten MySQL-Daten tatsächlich korrekt gespeichert. 2. Aber nach dem Neustart des Computers konnte Docker kein Volume mounten, da das Volume einige Sekunden nach dem Start des Containers verfügbar war (siehe einen Kommentar hier: https://github.com/docker/for-win/issues/584#issuecomment-286792858). Als Folge davon war die MySQL-Datenbank leer (das Volume wurde nicht gemountet, es konnten keine Daten gelesen werden).

Wenn ein Container manuell neu gestartet wird, werden alle persistenten Daten ordnungsgemäß geladen. Es war also nicht das Problem, an das ich gedacht habe, sondern ein anderes Problem, das glücklicherweise viel weniger ernst ist.

Danke an alle, die versuchen, mir zu helfen, dies zu lösen!

0

Sie eine named volume für Ihre MySQL-Daten verwenden können.

volumes: 
    - data-volume:/var/lib/db 

(das Ziel sollte sein, wo MySQL speichert es Daten)

+0

Das ist, was ich verwende: ' Bände: - ./database:/var/lib/mysql ' Es scheint, Daten zu dem Volumen zu sparend nur nach Ich mache 'Docker-Composer'. Aber beim Windows-Neustart fährt Docker für Windows die Container nicht so herunter, wie es "docker-composedown" tut, so dass die Daten verloren gehen. Ich mache es jetzt manuell, aber für den Fall, dass ich es vor dem Neustart einer Maschine vergesse, werden schlimme Dinge passieren. Auf der Suche nach einer Möglichkeit, das zu vermeiden. – Kirlat

0

Sie benötigen Windows-Dateisystemzugriff vom Docker-Motor durch einen Rechtsklick Docker Icon (unten rechts) aktivieren und montieren freigegebene Windows-Laufwerke. Wenn das bereits getan, müssen Sie vollständigen Pfad zum Laufwerk dh

volumes: 
    - c:\data:/var/lib/db 

auch schaffen versuchen, zu entfernen ./ dh Änderung:

volumes: 
    - wordpress:/var/www/html 
+0

scheint es, dass es mit der Angabe von 'wordpress:/var/www/html' nicht funktioniert. Es muss './wordpress:/var/www/html' sein, wenn es ein Unterordner in einem Verzeichnis mit der Datei docker-compose.yml ist. Es scheint, dass dieses Problem mit https://github.com/docker/for-win/issues/584 verwandt ist und nicht, was ich ursprünglich obwohl es war (siehe meine Antwort oben). Danke, dass Sie mir geholfen haben, dies zu lösen! – Kirlat