上传到本地主机(本地 S3 服务器)时出现 DNS 查找错误
DNS Lookup Error when uploading to localhost (local S3 server)
在 docker 容器中,scality/s3server
-图像是 运行。我正在使用 @aws-sdk/client-s3
API.
通过 NodeJS 连接到它
S3Client 设置如下所示:
const s3Client = new S3Client({
region: undefined, // See comment below
endpoint: 'http://127.0.0.1:8000',
credentials: {
accessKeyId: 'accessKey1',
secretAccessKey: 'verySecretKey1',
},
})
区域undefined
:this类似问题的回答中提到将区域排除在外,但是,使用await s3Client.config.region()
访问该区域仍然显示eu-central-1
,这是我在以前的版本中传递给构造函数的值。虽然我将其更改为 undefined
,但它仍然采用旧配置。这可能与问题有关吗?
可以成功创建存储桶 (test
),并且可以通过 运行 a ListBucketsCommand
(await s3Client.send(new ListBucketsCommand({}))
).
列出
然而,正如标题中提到的,将内容或流上传到存储桶
bucketParams = {
Bucket: 'test',
Key: 'test.txt',
Body: 'Test Content',
}
await s3Client.send(new PutObjectCommand(bucketParams))
不起作用,相反我收到 DNS 解析错误(这看起来很奇怪,因为我手动输入了 IP-address,而不是 localhost
。
无论如何,这里是错误信息:
Error: getaddrinfo EAI_AGAIN test.127.0.0.1
at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:72:26) {
errno: -3001,
code: 'EAI_AGAIN',
syscall: 'getaddrinfo',
hostname: 'test.127.0.0.1',
'$metadata': { attempts: 1, totalRetryDelay: 0 }
}
你有什么想法吗
- 为什么 区域 仍然是 配置的 and/or
- 为什么 DNS 查找发生/然后失败,但仅在上传时发生,而不是在检索有关存储桶的元数据/创建存储桶时?
对于第二个问题,我找到了解决方法:
不是直接指定 IP-Address,而是使用 endpoint: http://localhost:8000
(因此使用主机名而不是 IP-Adress)修复了 DNS 查找异常。但是,没有明显的理由说明为什么会发生这种情况。
在 docker 容器中,scality/s3server
-图像是 运行。我正在使用 @aws-sdk/client-s3
API.
S3Client 设置如下所示:
const s3Client = new S3Client({
region: undefined, // See comment below
endpoint: 'http://127.0.0.1:8000',
credentials: {
accessKeyId: 'accessKey1',
secretAccessKey: 'verySecretKey1',
},
})
区域undefined
:this类似问题的回答中提到将区域排除在外,但是,使用await s3Client.config.region()
访问该区域仍然显示eu-central-1
,这是我在以前的版本中传递给构造函数的值。虽然我将其更改为 undefined
,但它仍然采用旧配置。这可能与问题有关吗?
可以成功创建存储桶 (test
),并且可以通过 运行 a ListBucketsCommand
(await s3Client.send(new ListBucketsCommand({}))
).
然而,正如标题中提到的,将内容或流上传到存储桶
bucketParams = {
Bucket: 'test',
Key: 'test.txt',
Body: 'Test Content',
}
await s3Client.send(new PutObjectCommand(bucketParams))
不起作用,相反我收到 DNS 解析错误(这看起来很奇怪,因为我手动输入了 IP-address,而不是 localhost
。
无论如何,这里是错误信息:
Error: getaddrinfo EAI_AGAIN test.127.0.0.1
at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:72:26) {
errno: -3001,
code: 'EAI_AGAIN',
syscall: 'getaddrinfo',
hostname: 'test.127.0.0.1',
'$metadata': { attempts: 1, totalRetryDelay: 0 }
}
你有什么想法吗
- 为什么 区域 仍然是 配置的 and/or
- 为什么 DNS 查找发生/然后失败,但仅在上传时发生,而不是在检索有关存储桶的元数据/创建存储桶时?
对于第二个问题,我找到了解决方法:
不是直接指定 IP-Address,而是使用 endpoint: http://localhost:8000
(因此使用主机名而不是 IP-Adress)修复了 DNS 查找异常。但是,没有明显的理由说明为什么会发生这种情况。