【问题标题】:Dns.GetHostAddressesAsync: Resource temporarily unavailableDns.GetHostAddressesAsync:资源暂时不可用
【发布时间】:2021-02-21 16:58:14
【问题描述】:

首先,在某些情况下:我正在使用 .NetCore 开发带有 Identity 的 API。一切都在云服务器上,在 Docker 内。创建用户后,会使用 mailkit 和网络邮件服务器通过 Plesk(托管在同一台机器上)向新用户发送一封电子邮件。通过 Apache 使用 ProxyPass 从子域到 localhost 上的端口通过重定向访问 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,但仍然偶尔会触发错误,但并非总是如此。虽然总是在服务器上触发并且从不发送电子邮件

【问题讨论】:

    标签: c# .net docker mailkit


    【解决方案1】:

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

    问题与网络有关,这一点很明显,但这恰恰是关于容器如何相互隔离的问题。问题是,容器没有出站连接。在独立容器内工作的解决方案是使用 --network host 参数,这会将主机网络暴露给容器。请注意,使用它会从容器中删除端口映射,因为容器的端口 5000 现在链接到主机的端口 5000

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-04
      • 2021-05-07
      • 2018-02-24
      • 2016-01-25
      • 2012-04-25
      • 2018-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多