Haskell - resolving hostname inside Alpine Docker image does not work

Problem

I am trying to create a docker image using a Haskell application inside. however resolving the domain name of the hostnames of other containers on the network in my application inside the docker container fails (but I can wget/ pingother containers and their hostnames are correctly resolved).

To find the root cause, I tried to resolve the host names manually (using the package Network.DNS) and use only the IP addresses in servant-client. However, this gives just a critical error message:

Network.BSD.getProtocolByName: does not exist (no such protocol name: udp)

I think I am missing some packages inside my docker image. I tried to install libc6-compat, but without success ( libc6from Debian I was used to compile the Haskell application). Moreover, it /etc/protocolscontains the correct entries. What else is missing in the docker image?

Docker Images

The docker image that I use to run the application alpine:3.6is the entire docker file, there is not much in it . This is a different image than used to create the application (it is 20 times smaller).

The docker image that I use to create the haskell application is based on debian:stretch. Dockerfile .

All source code with assembly instructions is available here (the Angular part may be skipped):

https://github.com/carbolymer/blockchain/tree/0b041875f71b2a09dc8568ee7b0cc22460fd5624

+4
2

GHC 8.2.1 alpine + musl libc. alpine-glibc , segfaults, . , glibc.

+ alpine-glibc image + install gmp-dev .

0

, Haskell.

Alpine musl libc , , , GNU libc. Linux/.

Debian , , , , , . Debian, .

+1

Source: https://habr.com/ru/post/1689139/


All Articles