我使用一段代码进行一些自动操作,我需要在工作中进行操作。 代码在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了这个“待办事项列表”,如果这个问题再次出现:
还有什么人可以想到的? 这是一个很难回答的问题,我不能重现这个问题,也不能进一步挖掘,如果/当它再次发生,我必须回到这个阶段。
使用的容器是基于buildpack-deps:jessie ,只是安装代码和本地时间。
所以这个问题在同样的情况下再次出现了。 上面的书面清单经过了没有任何真正的反馈。
我可以确认所有的主机都是unknown ,其他所有的东西看起来应该是这样的(但是没有跟在“dnsmasq”上) 。