python-3.x - 为什么使用 AWS 完全限定域名时 getaddrinfo 失败并出现 socket.gaierror?
问题描述
我选择了一个使用 python 3 的项目。
一切正常,直到我创建了一台 AWS 机器来进行更多的单元测试。有一部分代码根据主机名和 IP 地址执行一些逻辑。
在 AWS 机器上,它抛出了这个错误:[Errno 11001] getaddrinfo failed <class 'socket.gaierror'>
result = []
# 1.1 push hostname into the result list
h_name = socket.gethostname()
result.append(str(h_name).lower())
# 1.2 push IPs into the result list
(h_name, aliases, ip_addresses) = socket.gethostbyname_ex(h_name)
if ip_addresses:
for ip in ip_addresses:
if not ip in result:
result.append(str(ip).lower())
# 2.1 push fqdn (fully qualified domain name) into the result list
fqdn = socket.getfqdn()
if not fqdn in result:
result.append(str(fqdn).lower())
# 2.2 push fqdn IPs into the result list
# ***************** ERROR IN BELOW LINE ******************
(h_name, aliases, ip_addresses) = socket.gethostbyname_ex(fqdn)
if ip_addresses:
for ip in ip_addresses:
if not ip in result:
result.append(str(ip))
这在其他机器上很好,但在这个 AWS VM 中它出错并且无法在代码中实现 2.2 部分:
(h_name, aliases, ip_addresses) = socket.gethostbyname_ex(fqdn_name)
通常 AWSfqdn
看起来像这样ec2amaz-1mcm2p3.us-east-2.compute.internal
解决方案
推荐阅读
- python - PyGame 分辨率支持
- python - 类的两个实例相等但哈希码不同
- java - 是否有一种简单的方法或函数可以获取数组中所有数字的差、积或商
- sqlite - 如何在 peewee 中用 max() 和 ifnull() 表示选择
- azure-active-directory - 在 Teams 中注册您的应用程序失败,并出现错误“您无权将 Hello World 添加到此团队”。
- ffmpeg - 使用 directshow 输入和 JPEG 图像序列输出为 FFmpeg 启用 QSV
- haskell - (<*) 如何以最佳方式实现序列?
- mysql - MYSQL 在不存在的日期中返回零,并且 COUNT 在特定日期存在多少行
- java - Spring Boot 无法连接 Kubernetes 集群中的 mysql
- nativescript-vue - 发送 POST 请求,接收 PDF 作为回报,并将其保存到 NativeScript 中的文件系统