Bitte beachten Sie die folgende Dockerfile:
%Vor%Problem: Das Verzeichnis "/ data" enthält keine "HELLO" -Datei. Darüber hinaus sind alle anderen Versuche, in das Volume-Verzeichnis zu schreiben (über echo, mv, cp, ...) nicht erfolgreich - das Verzeichnis ist immer leer. Keine Fehlermeldungen angezeigt.
Ich konnte nichts in der Dokumentation oder im Stackoverflow bezüglich dieses Problems finden.
Ist das etwas bekannt oder neu?
docker version
gibt zurück:
Jeder Schritt der Dockerfile wird in einem eigenen Container ausgeführt, der nach Abschluss dieses Schritts verworfen wird, und Datenträger werden verworfen, wenn der letzte (in diesem Fall) Container, der sie verwendet, nach Abschluss des Befehls gelöscht wird. Dies macht Volumes schlecht geeignet für die Verwendung in Dockerfiles , weil sie ihren Inhalt auf halbem Weg verlieren. Docker-Dateien sollen überall ausgeführt werden können, und wenn sie Volumes verwenden, die dauerhaft bleiben, würde dies das Problem erschweren. Auf der anderen Seite, wenn Sie dies wirklich wollen, einfach das Volume mit einem Verzeichnis auf dem Host zurück.
PS: Die Initialisierung des Datenverzeichnisses des Hosts erfolgt am besten außerhalb der Docker-Datei.
Als ich das letzte Mal gebraucht habe, habe ich diesen Schritt aus der Andockdatei heraus gelassen, weil die Idee dieses Schritts darin besteht, den Host so vorzubereiten, dass er das von dieser Dockerdatei erzeugte Image ausführen kann. Dann habe ich einen Container mit Docker Run erstellt und innerhalb dieses Containers habe ich die üblichen DB-Setup-Sachen ausgeführt.
%Vor%Wenn dieser Container jetzt auf einen neuen Host verschoben wird, kann dieser Data dir entweder mitgebracht oder mit demselben Prozess auf diesem Host erstellt werden. Oder wenn Sie, wie in meinem Beispiel, eine andere MySQL-Datenbank für eine andere Anwendung verwenden möchten, müssen Sie die Containererstellung nicht wiederholen.
Die wichtige Idee ist, die Containererstellung und das Host-Setup getrennt zu halten.