2

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

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

Docker Version : Version 19.3.5 
Mac OS Version : 10.14.6

我已经~/.aws/credentials使用 AWS 凭证创建了文件。

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,有人知道如何解决这个问题吗?

4

3 回答 3

1

我自己也有同样的问题。

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

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

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

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

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

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

更新:

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

于 2020-03-24T13:48:26.757 回答
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>
于 2020-05-13T19:14:49.550 回答
0

docker run您的命令中似乎缺少 -t 选项。看看这个将日志推送到 cloudwatch

于 2020-06-13T07:03:38.280 回答