[Haskell-cafe] Static executables in minimal Docker containers

Magnus Therning magnus at therning.org
Tue Apr 14 07:25:50 UTC 2015

On 14 April 2015 at 08:52, Michael Snoyman <michael at snoyman.com> wrote:
> Actually, I seem to have found the problem:
> open("/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache", O_RDONLY) = -1
> ENOENT (No such file or directory)
> open("/usr/lib/x86_64-linux-gnu/gconv/gconv-modules", O_RDONLY|O_CLOEXEC) =
> -1 ENOENT (No such file or directory)
> I found that I needed to copy over the following files to make my program
> complete:
> /usr/lib/x86_64-linux-gnu/gconv/gconv-modules
> /usr/lib/x86_64-linux-gnu/gconv/UTF-32.so
> Once I did that, I could get the executable to run in the chroot. However,
> even running the statically linked executable still required most of the
> shared libraries to be present inside the chroot. So it seems that:
> * We can come up with a list of a few files that need to be present inside a
> Docker image to provide for minimal GHC-compiled executables
> * There's a bug in the RTS that results in an infinite loop
> I'm going to try to put together a semi-robust solution for the first
> problem, and I'll report the RTS issue on Trac.

Excellent that you found the issue.

Is there some way of controlling which libc ghc links with?  There are
quite a few alternatives out there, and maybe it'd be easier to create
a *true* static binary by using another libc?


Magnus Therning                      OpenPGP: 0xAB4DFBA4
email: magnus at therning.org   jabber: magnus at therning.org
twitter: magthe               http://therning.org/magnus

More information about the Haskell-Cafe mailing list