How to copy file from host to container using Dockerfile
Solution 1
Use COPY command like this:
COPY foo.txt /data/foo.txt
# where foo.txt is the relative path on host
# and /data/foo.txt is the absolute path in the image
read more details for COPY in the official documentation
An alternative would be to use ADD but this is not the best practise if you dont want to use some advanced features of ADD like decompression of tar.gz files.If you still want to use ADD command, do it like this:
ADD abc.txt /data/abc.txt
# where abc.txt is the relative path on host
# and /data/abc.txt is the absolute path in the image
read more details for ADD in the official documentation
Solution 2
For those who get this (terribly unclear) error:
COPY failed: stat /var/lib/docker/tmp/docker-builderXXXXXXX/abc.txt: no such file or directory
There could be loads of reasons, including:
- For docker-compose users, remember that the docker-compose.yml
context
overwrites the context of the Dockerfile. Your COPY statements now need to navigate a path relative to what is defined in docker-compose.yml instead of relative to your Dockerfile. - Trailing comments or a semicolon on the COPY line:
COPY abc.txt /app #This won't work
- The file is in a directory ignored by
.dockerignore
or.gitignore
files (be wary of wildcards) - You made a typo
Sometimes WORKDIR /abc
followed by COPY . xyz/
works where COPY /abc xyz/
fails, but it's a bit ugly.
Solution 3
I faced this issue, I was not able to copy zeppelin [1GB] directory into docker container and was getting issue
COPY failed: stat /var/lib/docker/tmp/docker-builder977188321/zeppelin-0.7.2-bin-all: no such file or directory
I am using docker Version: 17.09.0-ce and resolved the issue with the following steps.
Step 1: copy zeppelin directory [which i want to copy into docker package]into directory contain "Dockfile"
Step 2: edit Dockfile and add command [location where we want to copy]
ADD ./zeppelin-0.7.2-bin-all /usr/local/
Step 3: go to directory which contain DockFile and run command [alternatives also available] docker build
Step 4: docker image created Successfully with logs
Step 5/9 : ADD ./zeppelin-0.7.2-bin-all /usr/local/ ---> 3691c902d9fe
Step 6/9 : WORKDIR $ZEPPELIN_HOME ---> 3adacfb024d8 .... Successfully built b67b9ea09f02
Solution 4
I got the following error using Docker 19.03.8 on CentOS 7:
COPY failed: stat /var/lib/docker/tmp/docker-builderXXXXXXX/abc.txt: no such file or directory
The solution for me was to build from Docker file with docker build .
instead of docker build - < Dockerfile
.
Solution 5
you can use either the ADD command https://docs.docker.com/engine/reference/builder/#/add or the COPY command https://docs.docker.com/engine/reference/builder/#/copy
Sasikiran Vaddi
Updated on November 10, 2021Comments
-
Sasikiran Vaddi over 2 years
I have written a Dockerfile which looks like this
FROM ubuntu:12.04 RUN apt-get update RUN apt-get install -y wget
Now I'm having a file called
abc.txt
in my host machine. How can I copy it to this container. Is there any step that I can add in Dockerfile which copy from Host to Container. -
thenakulchawla about 6 yearsIs there a possibility of doing this using the absolute path of the host machine?
-
george.yord about 6 yearsUnfortunately no, you can only add files from the folder of your Dockerfile or subfolders of it. Also, soft links will not work either. This is due to the docker build process. Building starts by compressing the directory where Dockerfile resides to an archive and uses this archive to retrieve files used in ADD/COPY commands.
-
thenakulchawla about 6 yearsthanks, I wrote a shell script to automate that part. It would have been better if I could handle that through Dockerfile.
-
Marcel Wilson over 4 yearsAdding to this -- if you move a Dockerfile in pycharm, it can alter the context automatically.
-
bormat over 4 yearsThe important step here is the fact the file must be in the same folder as the Dockerfile
-
hashlock almost 4 yearsAhh thanks! Found a pesky
.gitignore
that was preventingADD foo.zip .
in my Dockerfile. -
jrp over 3 yearsThanks! For me the issues was
.gitignore