2016-06-13 5 views
9

Ich versuchte den folgenden Befehl in meiner Dockerfile: COPY * / und wurde mächtig überrascht über das Ergebnis. Scheint, dass der naive Docker-Code die Verzeichnisse vom Glob durchläuft und dann jede Datei im Zielverzeichnis ablegt, während ich meine Verzeichnisstruktur respektvoll ignoriere.Wie kopiert man Ordner von Dockerfile nach Docker?

Zumindest verstehe ich this ticket und es entspricht sicherlich dem Ergebnis, das ich bekommen habe.

Ich denke, der einzige Grund, warum dieses Verhalten noch existieren kann, muss sein, dass es eine andere Möglichkeit gibt, dies zu tun. Aber es ist nicht so einfach für einen Bären von sehr wenig Gehirn zu verstehen, wie, weiß jemand?

Antwort

6

Als mentioned in your ticket:

Sie COPY files/* /test/ haben, die zu COPY files/dir files/file1 files/file2 files/file /test/ erweitert.
Wenn Sie dies in einzelne COPY Befehle (z. B. COPY files/dir /test/) aufteilen, werden Sie sehen, dass COPY den Inhalt jedes Arguments dir in das Zielverzeichnis kopiert (zum Guten oder zum Schlechten). Nicht der arg dir selbst, aber der Inhalt.

Ich bin nicht begeistert von der Tatsache, dass COPY das Top-Level-Verzeichnis nicht bewahrt, aber es ist seit einer Weile so.

so im Namen eine Abwärtskompatibilität zu erhalten, ist es nicht möglich, COPY/ADD eine Verzeichnisstruktur.

Die einzige Problemumgehung wäre eine Reihe von RUN mkdir -p /x/y/z zum Erstellen der Zielverzeichnisstruktur, gefolgt von einer Reihe von docker COPY (eine für jeden Ordner zu füllen).

2

Verwenden Sie ADD anstelle von COPY. Angenommen, Sie alles im Verzeichnis src vom Host zum Verzeichnis dst aus dem Behälter kopieren mag:

ADD src dst 

Hinweis: b wird in Behälter automatisch erstellt.

+2

Was ist "b"? Und https://github.com/docker/docker/issues/18396 schlägt vor, dass ADD keine Unterordner erstellt. – VonC

+0

Ihre Antwort ist nicht klar, aber ich könnte den Punkt bekommen, den Sie versuchen zu sagen und meine Antwort oben herausgefunden. Es läuft gut. –

6

Wie @Vonc sagte, gibt es keine Möglichkeit, einen Befehl wie jetzt hinzuzufügen. Die einzige Problemumgehung besteht darin, den Ordner zu erwähnen, ihn zu erstellen und ihm Inhalte hinzuzufügen.

# add contents to folder 
ADD src $HOME/src 

Möchten Sie einen Ordner src in die genannten src in Ihrem Verzeichnis und fügen Sie Inhalt Ihrer Ordner erstellen.

Verwandte Themen