/ / Warum kopiert mein Dockerfile keine Verzeichnisse - Docker

Warum kopiert meine Dockerdatei keine Verzeichnisse - Docker

In meiner Dockerfile habe ich diese zwei Zeilen:

ADD /ansible/inventory /etc/ansible/hosts
ADD /ansible/. /ansiblerepo

Die erste Zeile funktioniert, da ich den Container ausführen und sehen kann, dass meine hosts-Datei mit allen ips aus meiner Inventardatei gefüllt wurde.

Die zweite Zeile scheint jedoch nicht zu funktionieren. Ich versuche nur, alle Dateien / Unterverzeichnisse von ansible zu kopieren und in das Verzeichnis ansiblerepo im neuen Container zu kopieren.

Es gibt keine Fehler beim Erstellen des Abbilds, aber ansiblerepo ist nur ein leeres Verzeichnis, und nichts wurde darauf kopiert. Ich vermute, ich vermisse einfach einen Backslash oder so.

Antworten:

1 für die Antwort № 1

Nachlauf entfernen /. aus dem Quellverzeichnis sollte das beheben ADD Befehl.

In einem verwandten Hinweis, Best Practices für Docker schlagen vor zu verwenden COPY Über ADD Wenn Sie die URL-Download-Funktion nicht benötigen.


1 für die Antwort № 2

Docker ADD und COPY Befehle funktionieren relativ zum Build direkt und nur für Dateien in diesem Verzeichnis, die nicht mit a ausgeschlossen wurden .dockerignore Datei. Der Grund dafür ist, dass Builds tatsächlich auf dem Docker-Host ausgeführt werden, bei dem es sich um einen Remote-Computer handeln kann. Der erste Schritt von a docker build . ist das Packen aller Dateien im Verzeichnis (in diesem Fall) .) und schicke sie an den Host, um den Build auszuführen. Alle absoluten Pfade, die Sie angeben, werden als relativ zum Build-Verzeichnis interpretiert, und alle Informationen, die Sie an den Server senden, werden als fehlende Datei interpretiert.

Die Lösung besteht darin, / ansible in Ihr Build-Verzeichnis zu kopieren (normalerweise den gleichen Ordner wie Ihre Docker-Datei).