I've been playing around with docker images recently. I saw this docker doc on using FROM scratch. I am trying to see how far I can take this just for fun. I program in python. The doc says to compile the example C program to a binary, copy it to the container and then run it. In the container, I can not run python <program_file>. I saw this stack exchange post about compiling a python file to a binary, which meets our test use case here. It mentions using pyinstaller. So I run it on a test hello.py file which justs prints Hello with pyinstaller hello.py and I get a bunch of messages about building the projects. Okay, good. I can run the binary in my local machine by running "dist/hello" (this is the binary program mentioned by the post. So I write my Dockerfile to copy this program over and run it. My Dockerfile is
FROM scratch
ADD dist/hello /
CMD ["./hello"]
I run docker build . -t "hello:1.0" and then docker run hello:1.0 and....
I get an error messgage:
standard_init_linux.go:211: exec user process caused "no such file or directory"
What gives? What did I go wrong? Is it possible to get pyinstaller to compile a binary python project (multiple files, instead of just this one), then use the scratch image to run it. Are there any caveats if this is possible?
pyinstallersimply packages everything, it doesn't produce native code from Python code.