Haskell - Alpine Docker镜像内的主机名解析不起作用

car*_*mer 5 haskell hostname docker docker-compose alpine-linux

问题

我正在尝试使用内部的Haskell应用程序创建docker镜像.但是,我的Docker容器内的应用程序中网络中其他容器的主机名的域名解析失败(但我能够wget/ ping其他容器及其主机名正确解析).

为了找到根本原因,我尝试手动解析主机名(使用Network.DNS包)并仅使用IP地址servant-client.然而,这只会产生神秘的错误消息:

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

我想我在Docker镜像中遗漏了一些包.我尝试过安装libc6-compat但没有成功(libc6来自Debian用于编译Haskell应用程序).而且/etc/protocols包含正确的条目.码头图像中还缺少什么?

Docker图片

我用来运行应用程序的docker镜像alpine:3.6- 整个dockerfile,里面没有多少.这与用于构建应用程序的图像不同(它小约20倍).

我用来构建haskell应用程序的docker镜像基于debian:stretch.Dockerfile.

这里提供了包含构建指令的整个源代码(可以跳过Angular部分):

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

car*_*mer 2

我无法在 alpine + musl libc 上安装 GHC 8.2.1。作为一种解决方法,我尝试使用alpine-glibc映像,但每当我的应用程序尝试解析主机名时,它都会导致段错误。事实证明,这是 glibc 中的已知错误。

解决方案是使用动态链接的二进制文件+ alpine-glibc映像+gmp-dev另外安装。