在Docker容器上设置awslogs日志驱动程序

时间:2020-03-24 09:34:08

标签: docker amazon-cloudwatch docker-container aws-cloudwatch-log-insights docker-logs

我想将容器日志传递到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,有人知道如何解决此问题吗?

3 个答案:

答案 0 :(得分:1)

我自己也遇到同样的问题。

如您所建议,仅向客户端提供aws凭证是不够的。根据docker documentation

您必须向Docker守护程序提供AWS凭证

现在,在Mac机器上运行docker时,存在3种不同的情况:

  • MacOS环境(不用说,凭据不是从此处导出的)
  • VM环境(运行boot2docker的Oracle VirtualBox)
  • 容器环境(在此处尝试安装.aws /凭据,但不起作用)

我将尝试在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