Ich habe zwei Dart-Anwendungen, die ich andocken muss. Diese beiden Apps verwenden ein freigegebenes Quellverzeichnis.
Da Docker das Hinzufügen von Dateien aus Ordnern außerhalb des Kontextverzeichnisses (project/app1
) verhindert, kann ich keine Dateien aus ../shared
oder aus shared
(dem Symlink in projects/app1
) hinzufügen.
Ich suche nach einer Möglichkeit, Docker dazu zu verleiten.
Meine vereinfachte Projektstruktur
- projects
- app1
- Dockerfile
- shared (symlink ../shared)
- otherSource
- app2
- Dockerfile
- shared (symlink ../shared)
- otherSource
- shared
- source
Ich könnte Dockerfile
eine Ebene nach oben verschieben und docker build
von dort ausführen, aber dann benötige ich zwei Dockerfiles (für app1 und app2) im selben Verzeichnis.
Meine aktuelle Idee war, wenn ich die Tatsache, dass projects/app1/shared
ein Symlink ist, irgendwie verbergen könnte, wäre dieses Problem gelöst. Ich habe geprüft, ob ich projects
mit Samba teilen und an einer anderen Stelle erneut einbinden und Samba so konfigurieren kann, dass Symlinks wie normale Ordner behandelt werden, habe aber nicht herausgefunden, ob dies unterstützt wird (ich habe nicht viel Erfahrung mit Samba und habe es noch nicht ausprobiert, habe nur ein bisschen gesucht) ).
Gibt es ein anderes Tool oder einen anderen Trick, der dies zulässt?
Ich würde die Verzeichnisstruktur lieber nicht ändern, da dies andere Probleme verursachen und auch lieber keine Dateien kopieren würde.
Ich habe nicht viel Erfahrung mit docker
, daher kann ich nicht versprechen, dass dies funktionieren wird, aber eine Möglichkeit wäre, das Verzeichnis zu mounten, anstatt darauf zu verlinken:
$ cd projects/app1
$ mkdir shared
$ Sudo mount -o bind ../shared shared/
Damit wird ../shared
an ./shared
angehängt und sollte für das System vollständig transparent sein. Wie in man mount
erklärt:
Die Bindung ist montiert.
Seit Linux 2.4.0 ist es möglich, einen Teil der Dateihierarchie an einer anderen Stelle erneut einzuhängen. Der Aufruf lautet:
mount --bind olddir newdir
oder mit diesem fstab-Eintrag:
/olddir /newdir none bind
Nach diesem Aufruf sind an zwei Stellen die gleichen Inhalte zugänglich.