it-swarm.com.de

So lassen Sie einen verknüpften Ordner als normalen Ordner erscheinen

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.

36
zoechi

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.

32
terdon