我想将容器日志传递到AWS Cloud Watch。
我无法在Mac的Docker桌面中设置AWS凭证。
Docker Version : Version 19.3.5
Mac OS Version : 10.14.6
我已经使用AWS凭证创建了~/.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主机上设置的凭证还不够。如您所见,我尝试使用该卷执行此操作,但没有成功。
我在Mac上运行Docker,有人知道如何解决此问题吗?
答案 0 :(得分:1)
我自己也遇到同样的问题。
如您所建议,仅向客户端提供aws凭证是不够的。根据docker documentation:
您必须向Docker守护程序提供AWS凭证
现在,在Mac机器上运行docker时,存在3种不同的情况:
我将尝试在VM环境中安装凭据,看看是否有帮助。
如果我没记错,则docker守护进程正在VM环境上运行,因此在该位置安装AWS凭证可能会修复它。
更新:
使用第三方库工作临时修订:https://github.com/nearform/docker-cloudwatch/blob/master/index.js
答案 1 :(得分:1)
您可以尝试将环境变量添加到指向您的凭证文件的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>
答案 2 :(得分:0)
似乎您在docker run
命令中缺少-t选项。看看这个pushing logs to cloudwatch