首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在docker容器上设置awslogs日志驱动程序

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

Stack Overflow用户
提问于 2020-03-24 17:34:08
回答 3查看 2.4K关注 0票数 2

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

我无法在Docker Desktop for Mac中设置AWS凭据。

代码语言:javascript
复制
Docker Version : Version 19.3.5 
Mac OS Version : 10.14.6

我已经用亚马逊网络服务凭证创建了~/.aws/credentials文件。

代码语言:javascript
复制
aws_access_key_id : XXXXXXX,
aws_secret_access_key" : XXXXXXXX

我尝试通过以下方式运行Docker:

代码语言:javascript
复制
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用户为:

代码语言:javascript
复制
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

但得到以下错误:

代码语言:javascript
复制
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日志记录选项。

代码语言:javascript
复制
{
"log-driver" : "awslogs",
"log-opts" : {
"awslogs-region" : "xxxx",
"awslogs-group" : "xxxxx",
"awslogs-stream" : "xxxxx"
}
}

通过调查,我发现我需要在Docker守护进程中设置AWS凭据,而在我的Docker主机上设置AWS凭据是不够的。正如你所看到的,我试着用音量来做这件事,但是没有成功。

我在我的Mac上运行Docker,有谁知道如何解决这个问题吗?

EN

回答 3

Stack Overflow用户

发布于 2020-03-24 21:48:27

我自己也有同样的问题。

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

您必须向

守护进程提供AWS凭据

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

  • MacOS环境(不用说,凭据不会从此处导出)
  • 虚拟机环境(运行boot2docker)
  • Container环境的
  • VirtualBox (此处尝试挂载.aws/凭据,但不起作用)

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

如果我没记错的话,docker守护进程正在虚拟机环境中运行,因此在那里安装AWS证书可能会修复它。

更新:

第三方库的临时修复:https://github.com/nearform/docker-cloudwatch/blob/master/index.js

票数 1
EN

Stack Overflow用户

发布于 2020-05-14 03:14:50

您可以尝试将环境变量添加到指向您的凭据文件的docker.service文件。

调用命令查找docker.service文件:

代码语言:javascript
复制
# 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]部分中添加:

代码语言:javascript
复制
[Service]
Environment=AWS_SHARED_CREDENTIALS_FILE=<path_to_aws_credentials_file>
票数 1
EN

Stack Overflow用户

发布于 2020-06-13 15:03:38

看起来您的docker run命令中缺少-t选项。看看这个pushing logs to cloudwatch

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60828280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档