Docker build gives "unable to prepare context: context must be a directory: /Users/tempUser/git/docker/Dockerfile"
Solution 1
You need to point to the directory instead. You must not specify the dockerfile.
docker build -t ubuntu-test:latest .
does work.
docker build -t ubuntu-test:latest ./Dockerfile
does not work.
Solution 2
You can also run docker build with -f
option
docker build -t ubuntu-test:latest -f Dockerfile.custom .
Solution 3
Understand contexts
The docker build
command
The basic syntax of docker's build command is
docker build -t imagename:imagetag context_dir
The context
The context is a directory and determines what the docker build process is going to see: From the Dockerfile's point of view, any file context_dir/mydir/myfile
in your filesystem will become /mydir/myfile
in the Dockerfile and hence during the build process.
The dockerfile
If the dockerfile is called Dockerfile
and lives in the context, it will be found implicitly by naming convention.
That's nice, because it means you can usually find the Dockerfile in any docker container immediately.
If you insist on using different name, say "/tmp/mydockerfile", you can use -f
like this:
docker build -t imagename:imagetag -f /tmp/mydockerfile context_dir
but then the dockerfile will not be in the same folder or at least will be harder to find.
Solution 4
To specify a Dockerfile
when build, you can use:
docker build -t ubuntu-test:latest - < /path/to/your/Dockerfile
But it'll fail if there's ADD
or COPY
command that depends on relative path. There're many ways to specify a context
for docker build
, you can refer to docs of docker build for more info.
Solution 5
I face the same issue. I am using docker version:17.09.0-ce
.
I follow below steps:
- Create Dockerfile and added commands for creating docker image
- Go to directory where we have created Dockfile
- execute below command
$ sudo docker build -t ubuntu-test:latest .
It resolved issue and image created successsfully.
Note: build command depend on docker version as well as which build option we are using. :)

Damien-Amen
Updated on January 22, 2021Comments
-
Damien-Amen almost 2 years
I have a Dockerfile that is supposed to build an Ubuntu image. But whenever I run
docker build -t ubuntu-test:latest ./Dockerfile
it shows the following error on the console
unable to prepare context: context must be a directory: /Users/tempUser/git/docker/Dockerfile
I'm on Mac OsX. I tried to
sudo
as well. Nothing works. -
Dominic Motuka about 5 yearsDid this for ubuntu 12.04 :
docker build -t ubuntu:12.04 - < Dockerfile
You must be in the root of the Dockerfile -
Josh about 4 yearsIn order to get that second command to run for me I had to change it slightly:
docker build -t my_apache:latest -f ~/Users/documents/myapache/Dockerfile
(note the addition of a.
at the end) -
niranjan_harpale over 2 yearsThis worked for me. Dockerfile name in my case was Dockerfile-abcd so I had to fire:
docker build -t my-custom-name -f /path_to_my_docker_file/Dockerfile-abcd .
-
Monica Heddneck over 2 yearswhy is it like this? it seems strange to need to point to a dir when you could easily have it point to the file itself
-
Vincent Buscarello over 1 yearPer a below answer from @JakubKnejzlik, you can point to a file using the
-f
flag (then still refer to a directory, usually using.
, so docker still has the context it wants) -
Eugen Konkov about 1 yearStill get error:
unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /home/kes/work/projects/sidnet/chimera/Chimera-DevEnv/Chimera/Dockerfile: no such file or directory