Docker COPY issue - "no such file or directory"
For me the directory was in the correct context, only it was included in the (hidden)
.dockerignore file in the root of the project. This leads to the error message:
lstat mydir/myfile.ext: no such file or directory
From the documentation :
<src>path must be inside the context of the build; you cannot COPY ../something /something, because the first step of a docker build is to send the context directory (and subdirectories) to the docker daemon.
When you use
/srv/visitor you are using an absolute path outside of the build context even if it's actually the current directory.
You better organize your build context like this :
├── /srv/visitor │ ├── Dockerfile │ └── resources │ ├── visitor.json │ ├── visitor.js
And use :
COPY resources /srv/visitor/
docker build - < Dockerfile does not have any context.
docker build .
For me the issue was that I was using
docker build - < Dockerfile
From the documentation
Note: If you build using STDIN (
docker build - < somefile), there is no build context, so COPY can’t be used.
As Xavier Lucas [extremely helpful] answer has stated, you cannot use COPY or ADD from a directory outside of your build context (the folder you run "docker build" from, should be the same directory as your .Dockerfile). Even if you try to use a symlink, it will not work.
Note: This is specific to POSIX (Linux, Unix, Mac, Possibly Linux Subsystem for Windows). You may be able to do similar in Windows using JUNCTION.
cd ~/your_docker_project/ cp -al /subfolder/src_directory ./ echo "COPY src_directory /subfolder/" >> Dockerfile
Danger: Using this will make your docker project specific to the host. You almost never want to do this! Handle with care.
Application: Learning, Experimenting in a Development Environment
This did the trick for me. cp -al copies the directory structure and makes hard links for all the files. When you are done run "rm -rf ./src_directory" to remove it.
I was running into this issue and found out that I was able to add a context to the build variable in order to load my Dockerfile(s) from other directories. This allowed me to change my default Docker file structure a little more to my liking. Here is a snippet from my docker-compose.yml:
version: '3' services: webserver: build: context: . dockerfile: ./server/Dockerfile ...
By adding the context I was able to define where the files should be referenced. You can reference the Docker docs here: https://docs.docker.com/compose/compose-file/#context
Hope this helps!