docker集装箱中的突然DNS问题

我使用一段代码进行一些自动操作,我需要在工作中进行操作。 代码在Docker容器中运行,代码使用nodejs编写。

部分脚本请求来自不同服务器的信息,该服务器不是所涉及的容器的兄弟姐妹 – 重要的是要指出,因为docker有一个内部的dns系统,可以假定问题的原因。

剧本已经使用了大约一年,现在已经连续三周。 突然间,我在日志中看到一个错误:

getaddrinfo ENOTFOUND example.com example.com:443 at errnoException (dns.js:28:10) at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:79:26) 

我期望这是一个nodejs问题开始,但是当我在production containerinputbash并试图ping地址之后,它不能parsing地址 – ping直接工作的IP地址。

 # ping example.com ping: unknown host 

尝试ping主机中的地址没有任何问题,就像在我的电脑上,并在dev container的兄弟production container

这个脚本对组织来说是至关重要的,所以在一个急切的尝试中,我只是简单地删除了容器并重新运行。 马上就起作用了,现在已经运转了一个小时。

这对组织来说很好,但我的书呆子头脑不能rest。 发生什么事? 这怎么可能发生? 它能再次发生吗? 我能做些什么来阻止它? 我如何解决这个问题,而无需重新启动?

我的第一个想法是告诉nodejs为每个请求使用一个新的代理。 但感觉我相信这个问题是与操作系统有关,我不认为这将解决它。

到目前为止,我们已经创build了这个“待办事项列表”,如果这个问题再次出现:

  • ping ip | 只是为了检查目的地了
  • ping主机名
  • ping任何其他的主机名,看它是否是一个特定的主机名或一般
  • 挖主机名
  • cat /etc/resolv.conf
  • ip a | 检查回送接口是否启动
  • cat /etc/nsswitch.conf | 别人有这个文件损坏
  • 猫/ etc / hosts
  • 检查dnsmasq

还有什么人可以想到的? 这是一个很难回答的问题,我不能重现这个问题,也不能进一步挖掘,如果/当它再次发生,我必须回到这个阶段。

使用的容器是基于buildpack-deps:jessie ,只是安装代码和本地时间。

编辑

…跟进

所以这个问题在同样的情况下再次出现了。 上面的书面清单经过了没有任何真正的反馈。

我可以确认所有的主机都是unknown ,其他所有的东西看起来应该是这样的(但是没有跟在“dnsmasq”上)