2015-07-26 17 views
11

Próbuję skopiować pojedynczy plik z katalogu głównego kontekstu kompilacji do nowo utworzonego katalogu w obrazie dokowanego.Sposób korzystania z instrukcji Docker dotyczących kopiowania/ADD do kopiowania pojedynczego pliku do obrazu

Dockerfile że używam jest następująco:

FROM debian:latest 
RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 
COPY test.txt /usr/src/app 

Plik test.txt jest prosty plik ASCII w następujący sposób:

$ cat test.txt 
This is a test 

Jednak, gdy buduję ten obrazek I uzyskać obraz wskazujący, że ścieżka docelowa nie jest katalogiem.

$ 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 

Próbowałem użyć wielu kombinacji wersji doków, obrazów podstawowych i dystrybucji z zainstalowanym dokiem. Próbowałem również używać ADD zamiast COPY, ale wynik jest taki sam.

Obecnie próbuję to na CentOS 7 z następującym zainstalowanej wersji Döcker:

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 

Co zauważyłem jest to, że mogę skopiować katalog, ale nie pliku. Na przykład, jeśli utworzyć katalog „test” w korzeniu kontekstowego build i umieścić test.txt wewnątrz katalogu testów to mogę skopiować katalog z powodzeniem:

FROM debian:latest 
RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 
COPY test /usr/src/app 

Zauważ, że w powyższym Dockerfile mogę skopiować cały ./test zamiast zwykłego pliku ./test.txt. Ta kompilacja pomyślnie.

Docker documentation ma następujący przypadek użycia próbki dla instrukcji egzemplarzu, który jest podobny do tego, co próbuję zrobić:

COPY hom?.txt /mydir/ 

Czy ktoś może wskazać, co robię źle? Jak mogę skopiować jeden plik?

Odpowiedz

14

As stated in the Dockerfile documentation:

  • Jeśli <src> jest dowolny inny rodzaj pliku, jest on kopiowany indywidualnie wraz z jego metadanych. W takim przypadku, jeśli <dest> kończy się końcowym ukośnikiem /, zostanie uznany za katalog, a zawartość <src> zostanie zapisana pod numerem <dest>/base(<src>).

  • Jeśli <dest> nie kończy się ukośnikiem, to będą rozpatrywane zwykłym plikiem i zawartość <src> zostaną zapisane w <dest>.

Zatem trzeba napisać COPY test.txt /usr/src/app/ z tylną /.

+0

Dziękuję jwodder, pracował od razu. –

Powiązane problemy