Perché non riesco a copiare i miei file nel contenitore docker?

Sto cercando di spostare i miei file nella cartella htdocs di un'image apache. Il suo è quello che sembra il mio dockerfile:

FROM httpd:2.4 MAINTAINER Ankit COPY ./public-html/ /usr/local/apache2/htdocs/ 

Ma il command COPY non copia i file nel contenitore. Ecco l'output – index.html è presente per impostazione predefinita, quello che sto cercando di copiare è la cartella public-html:

 [email protected]:/usr/local/apache2/htdocs# ls index.html 

C'è qualcosa che mi manca?

AGGIORNAMENTO: la cartella pubblica-html non viene copiata ma il file index.html viene copiato, quale è il motivo di tale comportmento?

UPDATE2: Ecco il mio ultimo dockerfile, command per creare ed eseguire il contenitore.

 Dockerfile: FROM httpd:2.4 MAINTAINER Ankit COPY public-html/ /usr/local/apache2/htdocs/public-html/ docker build -f Dockerfile -t apache . docker run -d --name apws -v /Users/ankitsahu/workspace/docker_practi ce/public-html:/usr/local/apache2/htdocs/ -p 80:80 apache 

e quando controlla il contenuto utilizzando il command exec:

 [email protected]:/usr/local/apache2/htdocs# ls -a . .. index.html sample.html try 

Prima di COPY file in directory diverse da quelle di root, è necessario crearle.

Aggiorna il tuo Dockerfile per quanto segue

 FROM httpd:2.4 MAINTAINER Ankit MKDIR -p /usr/local/apache2/htdocs/ # Create the directory with '-p' option. COPY ./public-html/ /usr/local/apache2/htdocs/ 

Modifica 1

Sulla base della documentazione Docker CP Command , se

DEST_PATH esiste ed è una directory e se

SRC_PATH non termina con /. (cioè slash seguito da punto) la directory di origine viene copiata in questa directory

SRC_PATH finisce con /. (cioè: slash seguito da punto) il contenuto della directory di origine viene copiato in questa directory

Nel tuo caso /public-html/ do end con una barra, quindi solo i contenuti devono essere stati copiati. L'aggiornamento a ./public-html dovrebbe risolvere il problema.

Spero che questo ti aiuti.

Se si tenta di copiare la directory public-html nella directory /usr/local/apache2/htdocs per avere una directory di .../htdocs/public-html/ , quindi utilizzare quanto segue:

 COPY public-html/ /usr/local/apache2/htdocs/public-html/ 

Per impostazione predefinita, la copia di una directory copierà il contenuto di quella directory, quindi è necessario denominarlo nel bersaglio per la visualizzazione della directory.


Modifica: Il command di esecuzione contiene un volume che sostituisce il contenuto dell'image di questa directory:

 docker run -d --name apws -v /Users/ankitsahu/workspace/docker_practice/public-html:/usr/local/apache2/htdocs/ -p 80:80 apache 

Se vuoi vedere cosa c'è dentro l'image, non utilizzare il volume:

 docker run -d --name apws -p 80:80 apache 

Se invece si desidera utilizzare il volume, modificare il contenuto di / Users / ankitsahu / workspace / docker_practice / public-html sul tuo host docker.