It seems that docker build won't overwrite a file it has previously copied. I have a dockerfile with several copy instructions, and files touched in earlier COPY directives don't get overwritten by later ones.
A simplified example (although it also happens if the first copy is an entire directory that happens to contain the file in question):
COPY docker/config/file1.yml $BASE/config/thatfile.yml
COPY docker/config/file2.yml $BASE/config/thatfile.yml
After building this, $BASE/config/thatfile.yml contains the contents of file1.yml. Is there a way to get it to contain the contents of file2.yml?
My primary use case here is copying a whole folder of config files, and then replacing select config files for specific builds.
I experienced this too, but after much testing discovered that I had a typo in one of my
COPY
directives' destination paths.Double-check where those files are really going
I can't understand the behavior of your question. You must have a typo, use a different version, or you have a docker-compose volume which mounts something over something?
https://github.com/bor8/lolquadrat
Last output:
It can be clearly seen that the file
thatfile.yml
has the contents of the second file (file2content
) after the second COPY command.The running container shows
file2content
also. To test this, you can make aCMD tail -f /dev/null
in the last line of your Dockerfile and then go in withdocker exec -it <CONTAINER_ID_VIA_DOCKER_PS> /bin/sh
. And show the content withcat thatfile.yml
.What I haven't fully tested yet is whether the same behavior exists for a folder (instead of
file1.yml
).Maybe you have mounted volume?
Above does not work, if
/directory-in-container
is a mounted volume.