我想将我的容器日志传递给AWS Cloud Watch。
我无法在Docker Desktop for Mac中设置AWS凭据。
Docker Version : Version 19.3.5
Mac OS Version : 10.14.6我已经用亚马逊网络服务凭证创建了~/.aws/credentials文件。
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主机上设置AWS凭据是不够的。正如你所看到的,我试着用音量来做这件事,但是没有成功。
我在我的Mac上运行Docker,有谁知道如何解决这个问题吗?
发布于 2020-03-24 21:48:27
我自己也有同样的问题。
正如您很好地建议的那样,向客户端提供aws凭据是不够的。根据docker documentation
您必须向
守护进程提供AWS凭据
现在,在mac机器上运行docker有3种不同的场景:
我将尝试在VM环境中挂载凭据,看看是否有帮助。
如果我没记错的话,docker守护进程正在虚拟机环境中运行,因此在那里安装AWS证书可能会修复它。
更新:
第三方库的临时修复:https://github.com/nearform/docker-cloudwatch/blob/master/index.js
发布于 2020-05-14 03:14:50
您可以尝试将环境变量添加到指向您的凭据文件的docker.service文件。
调用命令查找docker.service文件:
# systemctl status docker.service
docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; disabled; vendor preset: enabled)编辑/lib/systemd/system/docker.service文件。
在[Service]部分中添加:
[Service]
Environment=AWS_SHARED_CREDENTIALS_FILE=<path_to_aws_credentials_file>发布于 2020-06-13 15:03:38
看起来您的docker run命令中缺少-t选项。看看这个pushing logs to cloudwatch
https://stackoverflow.com/questions/60828280
复制相似问题