AWS Cloudwatch使用Docker容器进行日志记录 - NoCredentialProviders:链中没有有效的提供程序

时间:2017-03-22 12:18:43

标签: amazon-web-services docker docker-compose amazon-cloudwatch amazon-cloudwatchlogs

我的docker-compose文件:

version: '2'
services:
  scraper:
    build: ./Scraper/
    logging:
      driver: "awslogs"
      options:
         awslogs-region: "eu-west-1"
         awslogs-group: "doctors-logs"
         awslogs-stream: "scrapers-stream"
    volumes:
      - ./Scraper/spiders:/spiders

我已使用aws configure命令将我的AWS凭据添加到我的mac,并且凭据正确存储在〜/ .aws / credentials

当我运行docker-compose时,我收到以下错误:

  

错误:for scraper无法启动服务scraper:无法初始化日志记录驱动程序:NoCredentialProviders:链中没有有效的提供程序。

     

已过时。       有关详细消息,请参阅aws.Config.CredentialsChainVerboseErrors

     

错误:启动项目时遇到错误。

我相信这是因为我需要在Docker守护程序中设置AWS凭据,但我无法弄清楚如何在macOs Sierra上完成此操作。

1 个答案:

答案 0 :(得分:5)

我发现了。在滚动您自己的EC2实例时(不使用Beanstalk等自动化解决方案),您需要为EC2实例分配一个角色,以便它能够与其他AWS服务进行通信。

Policy

该政策是Docker文档在https://docs.docker.com/engine/admin/logging/awslogs/

中提供的政策
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

然后您需要将此政策附加到角色

EC2 Role

该角色是第一个名为“Amazon EC2”的角色,其内容为“允许EC2实例代表您调用AWS服务。”

由于您只限制了对CloudWatch的访问权限,因此您很高兴。然后,在您的EC2列表中,使用“附加/替换IAM角色”将角色附加到您的实例:

IAM Role

Attach IAM Role

你应该好好去!