我正在尝试使用内部的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映像是alpine:3.6
-整个dockerfile,其中没有太多内容。这与用于构建应用程序的图像不同(缩小了约20倍)。
我用来构建haskell应用程序的docker镜像基于debian:stretch
。Dockerfile。
此处提供带有构建说明的整个源代码(可以跳过角度部分):
https://github.com/carbolymer/blockchain/tree/0b041875f71b2a09dc8568ee7b0cc22460fd5624
我无法在Alpine + Musl libc上安装GHC 8.2.1。作为一种解决方法,我尝试使用alpine-glibc映像,但是每当我的应用程序尝试解析主机名时,都会导致segfaults。事实证明,这是glibc中的已知错误。
解决方案是使用动态链接的二进制文件+ alpine-glibc映像+gmp-dev
附加安装。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句