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

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

我想将我的容器日志传递到 AWS Cloud Watch。

我无法在适用于 Mac 的 Docker Desktop 中设置 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,有人知道如何解决这个问题吗?

最佳答案

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

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

You must provide AWS credentials to the Docker daemon

现在,在 mac 机器上运行 docker 有 3 种不同的场景:

  • MacOS 环境(不用说,凭据不会从这里导出)
  • VM 环境(运行 boot2docker 的 Oracle VirtualBox)
  • 容器环境(尝试在此处安装 .aws/credentials 但没有成功)

我将尝试在 VM 环境中安装凭据,看看是否有帮助。

如果我没记错的话,docker daemon 正在 VM 环境中运行,因此在那里安装 AWS creds 可能会修复它。

更新:

使用第 3 方库进行临时修复:https://github.com/nearform/docker-cloudwatch/blob/master/index.js

关于docker - 在 docker 容器上设置 awslogs 日志驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60828280/

相关文章:

Docker - 错误 : Cannot perform an interactive login from a non TTY device (GCP Service Account)

amazon-web-services - 从 API 网关调用时,Cloudwatch 日志 PutLogEvents 操作失败并显示 com.amazon.coral.service#UnknownOperationException

amazon-web-services - CloudWatch中的AWS API Gateway $ input变量

docker - 连接多个Docker应用

mongodb - 将 mongodb docker 容器连接到本地主机

docker - 如何在运行时将容器添加到 Kubernetes pod

docker - 如何在 Kubernetes pod 中运行 docker 镜像?

angular - 如何在 Linux 上使用 Docker 和 Azure Web App 部署 Angular 4 应用程序

amazon-cloudwatch - Cloudwatch Logs Insights 处理多个@messages

docker - 无法停止 docker couchbase-community