Writing data to file in Dockerfile

pcsram picture pcsram · Jun 22, 2016 · Viewed 21.7k times · Source

I have a shell script, script.sh, that writes some lines to a file:

#!/usr/bin/env bash
printf "blah 
blah 
blah 
blah\n" | sudo tee file.txt

Now in my Dockerfile, I add this script and run it, then attempt to add the generated file.txt:

ADD script.sh .
RUN chmod 755 script.sh && ./script.sh 
ADD file.txt . 

When I do the above, I just get an error referring to the ADD file.txt . command:

lstat file.txt: no such file or directory

Why can't docker locate the file that my shell script generates? Where would I be able to find it?

Answer

michael_bitard picture michael_bitard · Jun 23, 2016

When you RUN chmod 755 script.sh && ./script.sh it actually execute this script inside the docker container (ie: in the docker layer).

When you ADD file.txt . you are trying to add a file from your local filesystem inside the docker container (ie: in a new docker layer).

You can't do that because the file.txt doesn't exist on your computer.

In fact, you already have this file inside docker, try docker run --rm -ti mydockerimage cat file.txt and you should see it's content displayed