Docker-Volume und Bind-Mounts werden verwendet, um Verzeichnisse auf dem Host-Betriebssystem an Speicherorte im Dateisystem des Containers zu binden. Während sie normalerweise verwendet werden, um ganze Verzeichnisse einzuhängen, können Sie sie auch verwenden, um einzelne Dateien symbolisch zu verknüpfen.
Symlink zu Docker vom Host
Das Mounten ganzer Verzeichnisse funktioniert gut, wenn Sie eine ganze Liste von Konfigurationsdateien überschreiben, aber wenn Sie nur eine als Ziel haben möchten, müssen Sie eine einzelne Datei mounten. Dies ist auch nützlich, wenn Sie mehrere Mounts in demselben Verzeichnis haben möchten, aber von verschiedenen Orten. Es funktioniert ähnlich wie ein normaler Linux-Symlink, außer dass es über Docker gehandhabt wird und die Brücke zwischen Host- und Container-Dateisystem überquert.
Für normale Docker-Volume-Mounts müssen Sie in ein Zielverzeichnis mounten , innerhalb dessen das Volume verknüpft wird.
docker volume create nginx-config docker run -d --name devtest --mount source=nginx-config,target=/etc/nginx nginx:latest
Bei Bind-Mounts kann die Quelle jedoch ein Verzeichnis oder eine Datei sein auf dem Host. Volume-Mounts unterstützen dies nicht, und obwohl Sie sie normalerweise verwenden möchten, müssen Sie die Bind-Mounts auf niedrigerer Ebene verwenden, wenn Sie einzelne Dateien mounten möchten.
Dazu können Sie den Container mit dem Flag --mount type=bind
ausführen , die einzelne Dateien unterstützen, wenn Sie den Pfad angeben:
docker run -it --mount type=bind,source=/path/file.cfg,target=/etc/example/file.cfg nginx sh
Wenn Sie Docker-Volumes wirklich verwenden möchten, können Sie alternativ ein Volume nur mit der Datei erstellen, die Sie mounten möchten, es in einem temporären Verzeichnis im Container mounten und dann einen tatsächlichen Symlink innerhalb des Containers erstellen (im Docker-Build-Skript ), die mit der Datei auf das temporäre Verzeichnis verlinken würde. Das ist wahrscheinlich insgesamt eine schlechtere Lösung als ein Bind-Mount, aber es ermöglicht Ihnen, die Daten über die Docker-Volume-API zu speichern.