docker - 在 docker 容器上设置 awslogs 日志驱动程序
问题描述
我想将我的容器日志传递给 AWS Cloud Watch。
我无法在 Docker Desktop for Mac 中设置 AWS 凭证。
Docker Version : Version 19.3.5
Mac OS Version : 10.14.6
我已经~/.aws/credentials
使用 AWS 凭证创建了文件。
aws_access_key_id : XXXXXXX,
aws_secret_access_key" : XXXXXXXX
我尝试通过以下方式运行 Docker:
docker run --name flask -v ${HOME}/.aws/:/root/.aws/:ro -d --log-driver=awslogs --log-opt awslogs-region=XXXX --log-opt awslogs-group=XXXX --log-opt awslogs-create-group=true flask-image
配置策略的 IAM 用户是:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
但出现以下错误:
docker: Error response from daemon: failed to initialize logging driver: failed to create Cloudwatch log stream: NoCredentialProviders: no valid providers in chain. Deprecated.
For verbose messaging see aws.Config.CredentialsChainVerboseErrors.
我也添加到docker.json
文件中。
在 Docker Daemon 文件中放置 AWS 日志记录选项。
{
"log-driver" : "awslogs",
"log-opts" : {
"awslogs-region" : "xxxx",
"awslogs-group" : "xxxxx",
"awslogs-stream" : "xxxxx"
}
}
通过调查,我发现我需要在 Docker 守护程序中设置 AWS 凭证,而在我的 Docker 主机上还不够。如您所见,我尝试使用音量来执行此操作,但没有成功。
我在我的 Mac 上运行 Docker,有人知道如何解决这个问题吗?
解决方案
我自己也有同样的问题。
正如您所建议的那样,仅向客户端提供 aws 凭据是不够的。根据 docker文档:
您必须向 Docker 守护程序提供 AWS 凭证
现在,在 mac 机器上运行 docker 有 3 种不同的场景:
- MacOS 环境(不用说,这里没有导出凭据)
- VM 环境(运行 boot2docker 的 Oracle VirtualBox)
- 容器环境(尝试在此处安装 .aws/credentials 但不起作用)
我将尝试在 VM 环境中安装凭据,看看是否有帮助。
如果我没记错的话,docker daemon 正在 VM 环境中运行,因此在那里安装 AWS 凭据可能会修复它。
更新:
使用 3rd 方库进行临时修复:https ://github.com/nearform/docker-cloudwatch/blob/master/index.js
推荐阅读
- spotfire - 导出所有计算列的计算
- html - 边缘与按钮内的图标重叠
- javascript - jasmine 似乎不支持模拟 setImmediate 的时钟
- dataframe - 有没有办法限制火花数据帧类型中的字符串长度?
- python - 我在 CentOS 7 上完成了 devstack 的安装并在日志中给出了这个错误:... / wsgi.py' cannot be loaded as Python module
- c++ - 使用删除功能?
- javascript - 在新的谷歌网站中重定向表单
- java - Java - 用于设备控制的非阻塞 SocketChannel,通用方法
- p5.js - p5js中的动画PNG帧速率
- php - 如何更改 GoDaddy 中的名称服务器可能会在托管程序中托管