Dns.GetHostAddressesAsync:资源暂时不可用



首先,对于某些上下文:我正在使用.NetCore开发带有Identity的API。一切都在云服务器上,在Docker中。创建用户后,将通过Plesk(托管在同一台机器上(使用mailkit和网络邮件服务器向新用户发送电子邮件。docker是通过Apache使用ProxyPass从子域重定向到localhost 上的端口来访问的

通过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

希望这个解决方案可以帮助其他

相关内容

  • 没有找到相关文章

最新更新