首页 > 解决方案 > 无法从 docker 容器访问 aws s3。被拒绝

问题描述

我正在尝试从 docker 容器访问 aws s3。创建具有 AWSS3FullAccess 的 IAM 角色并使用 json 配置文件设置凭证。

在代码中读取配置为

AWS.config.loadFromPath('./config/credentials.json');

但是,当代码运行时出现以下错误:

Error downloading file from s3
{ Error: connect ECONNREFUSED 169.254.169.254:80
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)
  message: 'Missing credentials in config',
  errno: 'ECONNREFUSED',
  code: 'CredentialsError',
  syscall: 'connect',
  address: '169.254.169.254',
  port: 80,
  time: 2020-01-25T07:42:31.329Z,
  originalError:
   { message: 'Could not load credentials from any providers',
     errno: 'ECONNREFUSED',
     code: 'CredentialsError',
     syscall: 'connect',
     address: '169.254.169.254',
     port: 80,
     time: 2020-01-25T07:42:31.328Z,
     originalError:
      { message: 'EC2 Metadata roleName request returned error',
        errno: 'ECONNREFUSED',
        code: 'ECONNREFUSED',
        syscall: 'connect',
        address: '169.254.169.254',
        port: 80,
        time: 2020-01-25T07:42:31.328Z,
        originalError: [Object] } } }

当在没有 docker 容器的情况下执行相同的代码并且如上所述提供配置文件时,它可以工作。

标签: amazon-web-servicesdockeramazon-s3

解决方案


发现我在配置 aws 凭据之前正在实例化 S3 客户端。尽管 aws 凭证是全局的,但是,nodejs sdk 似乎需要在实例化客户端之前设置凭证。


推荐阅读