首页 > 解决方案 > 为什么使用 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-3.x

解决方案


推荐阅读