微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Dns.GetHostAddressesAsync:资源暂时不可用

如何解决Dns.GetHostAddressesAsync:资源暂时不可用

首先,在某些情况下:我正在使用.NetCore开发具有身份的API。一切都在Docker内部的Cloud服务器上。创建用户后,将使用Mailkit和Webmail服务器通过Plesk(托管在同一台计算机上)将电子邮件发送给新用户。使用ProxyPass从子域到localhost上的端口,通过Apache重定向通过Apache访问docker。

通过JetBrain的Rider调试时,一切工作都很好,但是它无法在服务器上的docker中处理电子邮件

这是堆栈:

System.Net.Internals.socketExceptionFactory+ExtendedSocketException (00000001,11): Resource temporarily unavailable
   at System.Net.Dns.InternalGetHostByName(String hostName)
   at System.Net.Dns.ResolveCallback(Object context)
--- End of stack trace from prevIoUs location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptiondispatchInfo.Throw(Exception source)
   at System.Net.Dns.HostResolutionEndHelper(IAsyncResult asyncResult)
   at System.Net.Dns.EndGetHostAddresses(IAsyncResult asyncResult)
   at System.Net.Dns.<>c.<GetHostAddressesAsync>b__25_1(IAsyncResult asyncResult)
   at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar,Func`2 endFunction,Action`1 endAction,Task`1 promise,Boolean requiresSynchronization)

我还没有尝试在另一台Linux机器上运行docker进行测试。 我目前的猜测之一是SSL证书有问题,但我认为这不会导致DNS或任何内部套接字出现问题。

一个猜测是,这对于Docker获取DNS主机名是一个问题,但是因为它在本地可以正常工作。

编辑:我尝试了多次在Mac上运行docker,但仍然偶尔触发该错误,但并非总是如此。尽管它总是在服务器上触发,但从不发送电子邮件

解决方法

经过两周的研究,我终于偶然发现了一个解决方案:

这个问题与网络有关,这很明显,但这恰恰与容器之间如何隔离有关。问题是,该容器没有出站连接。在独立容器内工作的解决方案是使用--network host参数,该参数会将主机网络暴露给该容器。请注意,由于容器的端口5000现在已链接到主机的端口5000,因此使用此命令将删除容器的端口映射。

希望此解决方案可以帮助其他人

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。