Ich versuche, eine einzelne Datei aus dem Stammverzeichnis des Build-Kontexts in ein neu erstelltes Verzeichnis in einem Docker-Image zu kopieren.
Das Dockerfile, das ich benutze, ist wie folgt:
FROM debian:latest
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY test.txt /usr/src/app
Die test.txt-Datei ist eine einfache ASCII Textdatei wie folgt:
$ cat test.txt
This is a test
Wenn ich dieses Image erstelle, erhalte ich jedoch ein Image, das besagt, dass der Zielpfad kein Verzeichnis ist.
$ docker build .
Sending build context to Docker daemon 4.608 kB
Sending build context to Docker daemon
Step 0 : FROM debian:latest
---> 9a61b6b1315e
Step 1 : RUN mkdir -p /usr/src/app
---> Using cache
---> 86bd44a8776e
Step 2 : WORKDIR /usr/src/app
---> Using cache
---> ed6771adc681
Step 3 : ADD test.txt /usr/src/app
stat /var/lib/docker/devicemapper/mnt/ee5b9b7029f2adf27d332cbb0d98d6ad9927629a7569fd2d9574cb767b23547b/rootfs/usr/src/app/test.txt: not a directory
Ich habe versucht, mehrere Kombinationen von Docker-Versionen, Basisimages und Distributionen mit installiertem Docker zu verwenden. Ich habe auch versucht, ADD anstelle von COPY zu verwenden, aber das Ergebnis ist das gleiche.
Ich versuche dies derzeit unter CentOS 7 mit der folgenden Docker-Version:
Client version: 1.7.1
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 786b29d
OS/Arch (client): linux/AMD64
Server version: 1.7.1
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 786b29d
OS/Arch (server): linux/AMD64
Was mir aufgefallen ist, ist, dass ich ein Verzeichnis kopieren kann, aber keine Datei. Wenn ich zum Beispiel ein "Test" -Verzeichnis im Erstellungskontext-Stammverzeichnis erstelle und test.txt in das Testverzeichnis lege, kann ich das Verzeichnis erfolgreich kopieren:
FROM debian:latest
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY test /usr/src/app
Beachten Sie, dass ich im obigen Dockerfile das gesamte Verzeichnis ./test kopiere und nicht nur ./test.txt. Dieser Build erfolgreich.
In der Docker-Dokumentation ist der folgende Anwendungsbeispielfall für die Anweisung COPY enthalten, der dem entspricht, was ich zu tun versuche:
COPY hom?.txt /mydir/
Kann jemand darauf hinweisen, was ich falsch mache? Wie kann ich eine einzelne Datei kopieren?
Wie in der Dockerfile-Dokumentation angegeben:
Wenn es sich bei
<src>
Um eine andere Art von Datei handelt, wird sie zusammen mit ihren Metadaten einzeln kopiert. Wenn in diesem Fall<dest>
Mit einem abschließenden Schrägstrich/
Endet, wird dies als Verzeichnis betrachtet und der Inhalt von<src>
Wird unter<dest>/base(<src>)
geschrieben. .Wenn
<dest>
Nicht mit einem abschließenden Schrägstrich endet, wird es als reguläre Datei betrachtet und der Inhalt von<src>
Wird unter<dest>
Geschrieben.
Sie müssen also COPY test.txt /usr/src/app/
Mit einem abschließenden /
Schreiben.
Für mich habe ich einen Pfad hinzugefügt, der auf dem docker-compose.yml
Anstelle des Dockerfile
basiert:
Dateistruktur
.
..
/docker-compose.yml
/docker/
/docker/php/
/docker/php/Dockerfile
/docker/php/my_file
und in /
habe ich docker-compose up --build
ausgeführt.
anstelle von COPY docker/php/my_file /some/location
musste ich COPY my_file /some/location
ausführen