加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 03:49:26 所属栏目:安全 来源:网络整理
导读:问题 我正在尝试使用内部的Haskell应用程序创建docker镜像.但是,我的Docker容器内的应用程序中网络中其他容器的主机名的域名解析失败(但我能够wget / ping其他容器并正确解析它们的主机名). 为了找到根本原因,我尝试手动解析主机名(使用Network.DNS包)并仅使

问题

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

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

Network.BSD.getProtocolByName:不存在(没有这样的协议名称:udp)

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

Docker图片

我用来运行应用程序的docker镜像是高山:3.6 – Whole dockerfile,there’s not much in it.这是用于构建应用程序的不同图像(它小约20倍).

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

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

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

最佳答案
听起来你缺少一些链接依赖项来运行你的Haskell代码.

Alpine使用musl libc缩小尺寸,这意味着大多数标准链接二进制文件不会使用标准发行版运行,因为它们使用GNU libc.要么在alpine image中正常编译应用程序,要么创建statically linked binary to run in any Linux distro/container.

基础Debian层在使用它的任何图像之间共享,因此在任何情况下你可能都没有像你想象的那样节省多少空间.如果使用Debian图像会更容易,那就使用它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读