Dockerfile COPY cannot find the file
You might get this error when COPY a file from host to the container.
COPY failed: file not found in build context or excluded by .dockerignore: stat <Filename>: file does not exist
Well… most of the online posts suggested to check .dockerignore file.
I was lilke…Okey. Maybe, checking the .dockerignore file is the first step you should go.
The error message has given a great hint, the file is not in the build context!!!
For instance,
You create a path ~/test/docker/
Put the Dockerfile in ~/test/docker/Dockerfile, which looks like this :
FROM Ubuntu
COPY ~/.ssh/known_host /root/known_host
Then, run the docker build in ~/test/docker/, you’ll see the error above. Because the build context in this case is within ‘~/test/docker/’ , the docker build command is unable to visit any file out of this path, it only is aware of the files in ~/test/docker/* .
Therefore, either you copy the ~/.ssh/known_host to ~/test/docker/ or its sub-dir, or you have to switch your build context to ~ in this case.
But it might introduce another issue — the docker build will send the context to the docker daemon before it starts the build, that will take a long time ifyour home dir is very huge,.
OK, you can use .dockerignore file now, but I prefer another solution: https://docs.docker.com/develop/develop-images/build_enhancements/
Very straightforward, just add ‘DOCKER_BUILDKIT=1'
prior to your ‘docker build’ command. E.g.
DOCKER_BUILDKIT=1 docker build -t test123 .
it runs like a flash…