为什么调用 `getaddrinfo()` 会失败,并出现 `EAI_SYSTEM` 且 errno 设置为 `EBUSY`(“设备或资源繁忙”)?

为什么调用 `getaddrinfo()` 会失败,并出现 `EAI_SYSTEM` 且 errno 设置为 `EBUSY`(“设备或资源繁忙”)?

我在容器中运行时看到此错误apt update(如果这是有用的信息)。 apt吐出:

System error resolving 'archive.ubuntu.com:80' - getaddrinfo (16: Device or resource busy)

我尝试查看 glibc 源代码,但我无法理解发生了什么。

答案1

您的容器功能不全,GNU C 库的名称服务切换功能在其中不起作用。具体来说,它们无法动态加载/ 。 在这种情况下返回设置为(并设置为)。_nss_N_gethostbyname3_r_nss_N_gethostbyname2_rgetaddrinfo()errnoEBUSYh_errnoNETDB_INTERNAL

您还在查看错误函数的源代码。那是getaddrinfo_a()

答案2

检查您的访问权限。就我而言,/etc/hosts 的模式为 0600,适用于 root,但在下载时 apt 会删除权限。

其他有趣的地方可以检查:

  • /lib,/lib/ARCH_TRIPLE,/lib/ARCH_TRIPLE/libnss_dns.so
  • /etc/resolv.conf
  • /usr、/usr/bin

相关内容