`EAI_SYSTEM`とerrnoが `EBUSY`(「デバイスまたはリソースを使用しています」)に設定されていると、 `getaddrinfo()`呼び出しが失敗するのはなぜですか?

`EAI_SYSTEM`とerrnoが `EBUSY`(「デバイスまたはリソースを使用しています」)に設定されていると、 `getaddrinfo()`呼び出しが失敗するのはなぜですか?

コンテナで実行すると、このエラーが表示されますapt update(有用な情報の場合)。適切な吐き出し:

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

glibcのソースコードを見ようとしましたが、何が起こっているのかわかりません。

答え1

コンテナは完全には機能せず、GNU C ライブラリのネームサービス切り替え機能はコンテナで動作しません。特に、動的にロード/ロードできません。この場合、returnは次に設定されます(および次に設定されます)。_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

関連情報