You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker awslogs日志驱动:.aws/credentials存放位置及报错解决

Docker awslogs 驱动凭证文件问题及解决

问题描述

根据Docker awslogs官方文档说明:

默认使用AWS共享凭证文件(root用户的~/.aws/credentials)

执行以下命令将AWS credentials 文件复制到该位置后:

sudo bash -c 'mkdir -p $HOME/.aws; cp .aws/credentials $HOME/.aws/credentials'

尝试运行使用该日志驱动的容器:

docker run --log-driver=awslogs --log-opt awslogs-group=neiltest-deleteme --rm hello-world

仍出现凭证错误:

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守护进程是否并非以root运行?如何确认其运行用户?

注:systemd系统可通过设置环境变量解决,但Google CloudShell中无效,因其Docker守护进程启动方式特殊。

解决办法

1. 确认Docker守护进程的运行用户

执行以下命令查看dockerd进程的运行用户:

ps aux | grep dockerd

输出中dockerd对应的用户列即为守护进程的运行用户。

2. 放置凭证到正确位置

Docker守护进程读取的是自身运行用户的~/.aws/credentials文件,而非执行docker run命令的用户。若守护进程以root运行,需将凭证放到root的家目录:

sudo mkdir -p /root/.aws
sudo cp .aws/credentials /root/.aws/credentials
sudo chmod 600 /root/.aws/credentials

必须将凭证文件权限设为600,这是AWS对凭证文件的强制要求,否则会被判定为无效。

3. Google CloudShell 特殊处理

方法一:运行容器时指定凭证路径

直接在docker run命令中通过参数指定凭证文件位置:

docker run --log-driver=awslogs \
  --log-opt awslogs-group=neiltest-deleteme \
  --log-opt awslogs-region=你的AWS区域 \
  --log-opt awslogs-credentials-file=/path/to/your/credentials \
  --rm hello-world

方法二:修改Docker守护进程全局配置

创建或编辑/etc/docker/daemon.json文件:

{
  "log-opts": {
    "awslogs-group": "neiltest-deleteme",
    "awslogs-region": "你的AWS区域",
    "awslogs-credentials-file": "/path/to/your/credentials"
  }
}

之后重启Docker守护进程:

sudo systemctl restart docker

注:需确认CloudShell环境下你有修改该配置文件的权限

内容的提问来源于stack exchange,提问作者Neil C. Obremski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 07:05:22