Why I'm unable to COPY my files into docker container?

Ankit Sahu picture Ankit Sahu · Jul 30, 2017 · Viewed 8.5k times · Source

I'm trying to move my files into htdocs folder of an apache image. Her's what my dockerfile looks like:

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

But the COPY command is not copying the files into the container. Here's the output - index.html is there by default, what I'm trying to copy is public-html folder:

root@8453b6ffa6fd:/usr/local/apache2/htdocs# ls
index.html

Is there something I'm missing?

UPDATE: The public-html folder is not getting copied but the file index.html is being copied there, what is the reason for such behaviour?

UPDATE2: Here's my latest dockerfile, command to build and run container.

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

and when i check the content using exec command:

root@b54e53a231b7:/usr/local/apache2/htdocs# ls -a
.  ..  index.html  sample.html  try

Answer

BMitch picture BMitch · Jul 30, 2017

If you are trying to copy the directory public-html into the directory /usr/local/apache2/htdocs to have an .../htdocs/public-html/ directory, then use the following:

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

By default, copying a directory will copy the contents of that directory, so you need to name it in the target for the directory to appear.


Edit: Your run command contains a volume that will replace the image contents of this directory:

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

If you want to see what's inside the image, do not use the volume:

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

If instead you want to use the volume, then modify the contents of /Users/ankitsahu/workspace/docker_practice/public-html on your docker host.