【问题标题】:Set awslogs log driver on docker container在 docker 容器上设置 awslogs 日志驱动程序
【发布时间】:2020-07-04 18:50:36
【问题描述】:

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

我无法在 Docker Desktop for Mac 中设置 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 守护程序文件中放置 AWS 日志记录选项。

{
"log-driver" : "awslogs",
"log-opts" : {
"awslogs-region" : "xxxx",
"awslogs-group" : "xxxxx",
"awslogs-stream" : "xxxxx"
}
}

通过调查,我发现我需要在 Docker 守护进程中设置 AWS 凭证,而在我的 Docker 主机上还不够。如您所见,我尝试使用音量来执行此操作,但没有成功。

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

【问题讨论】:

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


    【解决方案1】:

    我自己也有同样的问题。

    正如您所建议的,仅向客户端提供 aws 凭据是不够的。根据码头工人documentation

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

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

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

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

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

    更新:

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

    【讨论】:

      【解决方案2】:

      您可以尝试将环境变量添加到指向您的凭证文件的 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>
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2017-06-18
          • 2020-10-10
          • 1970-01-01
          • 1970-01-01
          • 2022-12-23
          • 1970-01-01
          • 2019-10-24
          • 2019-06-02
          • 2016-06-17
          相关资源
          最近更新 更多