linux - 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
解决方案
我在 ubuntu 18 实例上遇到了类似的问题。以下是对我有用的步骤:
- mkdir -p /etc/systemd/system/docker.service.d/
- 触摸 /etc/systemd/system/docker.service.d/aws-credentials.conf
- vi /etc/systemd/system/docker.service.d/aws-credentials.conf 文件内容如下: [Service] Environment="AWS_ACCESS_KEY_ID=" Environment="AWS_SECRET_ACCESS_KEY="
- sudo systemctl daemon-reload
- 须藤服务码头重新启动
推荐阅读
- javascript - 我如何在 Popper v2 上禁用翻转
- cuda - Cuda 动态并行性:一个可以创建的子线程的深度
- php - 一次请求表单和 POST?
- ruby-on-rails - 从模型中提取 after_commit 回调
- javascript - 在 JavaScript 中生成随机子链接
- swift - “var get return”语句与简单的 var 语句有什么区别
- python - 无法使用 google drive api 复制 google 幻灯片文件
- c - 需要帮助在 C 中解析“var1=bob&var2=smith”形式的字符串
- reverse-engineering - Windows XP 的 Windbg 符号
- go - Goroutine 示例 - Donovan/Kernighan 的书 - 需要解释