首页 > 解决方案 > Docker awslogs 给出错误 NoCredentialProviders

问题描述

问题

我正在尝试使用我的本地服务器将 docker 日志发送到 Aws Cloudwatch,但它在身份验证时一直失败。我花了很多时间搜索文档和教程——但它不起作用。

方法

我已经安装了 AWS-cli 并对其进行了配置,因此 ~/.aws/config 填充了我的凭据。为了安全起见,我还临时设置了会话变量:

EXPORT AWS_SECRET_ACCESS_KEY=...
EXPORT AWS_ACCESS_KEY_ID=...
EXPORT AWS_SESSION_TOKEN=...

我已经验证我可以使用以下方式连接到 AWS:

aws s3 ls

这是我的运行配置:

docker run --log-driver=awslogs --log-opt awslogs-group=docker-logs --log-opt awslogs-region=eu-west-1 --log-opt awslogs-create-group=true alpine echo 'hi cloudwatch'

跟踪 /var/log/daemon.log 时,我看到以下错误:

Feb 1 01:12:07 XXXXXX dockerd[7389]: time="2021-02-01T01:12:07.670370559+01:00" level=error msg="Failed to create log stream" errorCode=NoCredentialProviders logGroupName=docker-logs logStreamName=61c82801d22d3db4c68cdc5b3d1dcba51f97c77dea5ce33e262b712c0e2a23a7 message="no valid providers in chain. Deprecated.\n\tFor verbose messaging see aws.Config.CredentialsChainVerboseErrors" origError=""

我还尝试让 docker 将会话变量作为 --ENV 参数运行。还是不行。我还尝试将 EXPORT 的变量插入 /etc/default/docker。仍然没有运气。

如果我使用 log-driver="json-file" 运行并指向文件,Docker 上传到 cloudwatch 没有问题。因此,只有 awslogs 会出现问题。

版本

$ aws --version
aws-cli/2.1.22 Python/3.7.3 Linux/4.19.57-v7l+ source/armv7l.raspbian.10 prompt/off
$ docker --version
Docker version 20.10.2, build 2291f61

标签: linuxdockeramazon-cloudwatch

解决方案


我在 ubuntu 18 实例上遇到了类似的问题。以下是对我有用的步骤:

  1. mkdir -p /etc/systemd/system/docker.service.d/
  2. 触摸 /etc/systemd/system/docker.service.d/aws-credentials.conf
  3. vi /etc/systemd/system/docker.service.d/aws-credentials.conf 文件内容如下: [Service] Environment="AWS_ACCESS_KEY_ID=" Environment="AWS_SECRET_ACCESS_KEY="
  4. sudo systemctl daemon-reload
  5. 须藤服务码头重新启动

推荐阅读